#include<bits/stdc++.h>
#include<climits>
using namespace std;
int n=5,vis[6][6],minn=INT_MAX;
int k[1000][2];//记录每次走过的路径
int m[1000][2];//记录更新后的短路径
int step[4][2]={1,0,-1,0,0,-1,0,1};//向下,向上,向左,向右走
bool used[6][6];//避免走过的再走
void dfs(int x,int y,int ans){
if(x==4&&y==4){
minn=min(ans,minn);
memset(m,0,sizeof m);
for(int i=0;i<minn;i++){
m[i][0]=k[i][0];
m[i][1]=k[i][1];
}
return;
}
if(ans>n*n/2) return;
for(int i=0;i<4;i++){
int xx=x+step[i][0];
int yy=y+step[i][1];
if(!used[xx][yy]&&vis[xx][yy]==0&&xx>=0&&xx<=4&&yy>=0&&yy<=4){
k[ans][0]=xx;
k[ans][1]=yy;
used[xx][yy]=1;
dfs(xx,yy,ans+1);
used[xx][yy]=0;
}
}
}
int main(){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>vis[i][j];
}
}
used[1][1]=1;
dfs(0,0,1);
for(int i=0;i<minn;i++){
printf("(%d, %d)\n",m[i][0],m[i][1]);//输出最短的路径
}
return 0;
}
K-迷宫问题(dfs+记录路径)
于 2022-03-26 21:41:47 首次发布