a982.
迷宮問題#1
| From: [219.91.14.225] |
發表日期
:
2020-08-17 02:34
用queue做BFS
先用陣列 maze[][] 存迷宮 且以int作為型態
並以-1表示牆壁
0表示可以走的路
先令maze[2][2]=1
從(2,2)開始 每走一步就紀錄已走幾步 而步數會是前一格+1
一直做直到終點 而答案正會是maze[n-1][n-1]
以下是我的程式碼 歡迎參考
(btw的迷宮陣列是以(0,0)做開頭,所以會跟上面講的有點不一樣)
#include <cstdio>
#include <queue>
#define N 100
using namespace std;
struct s{
int x,y;
};
int main()
{
int n,maze[N][N],dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
while(scanf("%d",&n)!=EOF){
char tmp[N];
for(int i=0;i<n;i++){
scanf("%s",&tmp);
for(int j=0;j<n;j++){
if(tmp[j]=='#')maze[i][j]=-1;
else maze[i][j]=0;
}
}
bool flag=false;
int xx,yy;
queue<s> q;
q.push({1,1});
maze[1][1]=1;
while(q.size() && !flag){
xx=q.front().x,yy=q.front().y;
if(xx==n-2 && yy==n-2){
flag=true;
break;
}
for(int i=0;i<4;i++){
if(maze[xx+dir[i][0]][yy+dir[i][1]]==0){
q.push({xx+dir[i][0],yy+dir[i][1]});
maze[xx+dir[i][0]][yy+dir[i][1]]=maze[xx][yy]+1;
}
}
q.pop();
}
if(flag)printf("%d\n",maze[n-2][n-2]);
else printf("No solution!\n");
}
return 0;
}