Untitled
unknown
plain_text
2 years ago
1.9 kB
5
Indexable
#include<iostream>
using namespace std;
int n, m, visited[50][50];
int a[50][50];
int startx, starty, endx, endy;
int jump, jumpmin;
void backtrack(int row, int col, int state){
if(jump>jumpmin) return;
if(row==endx && col == endy){
if(jump<jumpmin) jumpmin = jump;
return;
}
for(int i=0; i<2; i++){
if(i==0){
for(int j=0; j<2; j++){
if(j==0){
for(int k=row; k<n; k++){
if(visited[k][col]==0 && (a[k][col]==1||a[k][col]==3)){
visited[k][col] = 1;
jump+=1;
backtrack(k, col, 0);
visited[k][col]=0;
jump-=1;
}
}
}
else{
for(int k=row;k>=0 ; k--){
if(visited[k][col]==0 && (a[k][col]==1||a[k][row]==3)){
visited[k][col] = 1;
jump+=1;
backtrack(k, col, 0);
visited[k][col]=0;
jump-=1;
}
}
}
}
}
else if(i==1 && state==0){
for(int j=0; j<2; j++){
if(j==0){
for(int k=col; k<m; k++){
if(visited[row][k]==0 && (a[row][k]==1||a[row][k]==3)){
visited[row][k] = 1;
backtrack(row, k, 1);
visited[row][k]=0;
}
}
}
else{
for(int k=col-1;k>=0 ; k--){
if(visited[row][k]==0 && (a[row][k]==1||a[row][k]==3)){
visited[row][k] = 1;
backtrack(row, k, 1);
visited[row][k]=0;
}
}
}
}
}
}
}
int main(){
int t;
cin>>t;
for(int tc=1; tc<=t; tc++){
cin>>n>>m;
for(int i=0; i<n; i++){
for(int j=0;j<m; j++){
cin>>a[i][j];
visited[i][j] = 0;
if(a[i][j]==2){
startx = i;
starty = j;
}
else if(a[i][j]==3){
endx = i;
endy = j;
}
}
}
jump = 0;
jumpmin = 1000;
visited[startx][starty]=1;
backtrack(startx, starty,0);
cout<<jumpmin<<endl;
}
}Editor is loading...
Leave a Comment