Codeup 5978【递归入门】走迷宫
思路:
1.用二维数组记录迷宫,从起始点dfs遍历寻找目标点
2.用另一个二维数据记录路径
注意:
1.dfs时要按照左下右上的顺序
2.不能从起始点dfs到目标点要输出-1
附上AC代码:
#include<iostream>
#include<cmath>
using namespace std;
int map[100][100]; //保存迷宫
int n,m,cnt=0,ex,ey,jud=1;
int res[1000][2]; //记录路径
int x[4]={0,-1,0,1},y[4]={-1,0,1,0}; //左上右下
void dfs(int tx,int ty){
if(tx==ex-1&&ty==ey-1){ //到达目标点
jud=0;
res[cnt][0]=ex;
res[cnt++][1]=ey;
for(int i=0;i<cnt;i++){ //格式化输出
if(i!=0) cout<<"->";
cout<<"("<<res[i][0]<<","<<res[i][1]<<")";
}
cout<<endl;
cnt--;
return;
}
for(int i=0;i<4;i++){
if(tx+x[i]>=0&&tx+x[i]<n&&ty+y[i]>=0&&ty+y[i]<m&&(map[tx+x[i]][ty+y[i]])){
map[tx][ty]=0; //标记
res[cnt][0]=tx+1; //记录
res[cnt++][1]=ty+1;
dfs(tx+x[i],ty+y[i]);
cnt--; //回溯
map[tx][ty]=1;
}
}
}
int main(){
int sx,sy;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>map[i][j];
}
}
cin>>sx>>sy>>ex>>ey;
dfs(sx-1,sy-1);
if(jud) cout<<"-1";
return 0;
}
ACM小白,有诸多不足,欢迎指正。

浙公网安备 33010602011771号