K:
普通的走迷宫问题。BFS都快写完了才发现它要求输出路径,考虑到只是个5*5迷宫且路径唯一,DFS可行。
首先这题和P1101 单词方阵这题很像,关键点在于要把记录路径的结构体数组也作为参数传入DFS函数中,从而达到“只保存最短路径”的目的。
然后也出了一点小差错,比如说因为它是5*5迷宫,不知怎么的就觉得走5步就可以了……可能是因为参考了上面这道单词方阵,思路乱了。
一遍过啦。
#include<stdio.h>
#include<iostream>
using namespace std;
int vis[7][7];
int map[7][7];
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
struct node{
int x,y;
};
void dfs(int ans,node c[],int x,int y){
if(x==5&&y==5){
for(int i=1;i<=ans-1;i++){
printf("(%d, %d)\n",c[i].x-1,c[i].y-1);
}
}
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&ny>=1&&nx<=5&&ny<=5){
if(map[nx][ny]!=1&&!vis[nx][ny]){
vis[nx][ny]=1;
c[ans].x=nx;
c[ans].y=ny;
dfs(ans+1,c,nx,ny);
}
}
}
}
int main()
{
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>map[i][j];
}
}
node c[30];
vis[1][1]=1;
c[1].x=1;
c[1].y=1;
dfs(2,c,1,1);
return 0;
}