1255:迷宫问题

迷宫问题

思路肯定是可以参考 Dungeon Master 的。

但是在此基础上起点和终点已经确定,另外迷宫的表示也是数值。

我这里打印结果用的是深搜肯定还有其他方法

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 using namespace std;
 6 
 7 #define M 5
 8 const int N=10;
 9 int a[N][N],b[N][N],t[]={1,0,-1,0,0,1,0,-1};
10 queue<int> q;
11 
12 bool print(int x,int y){
13     if(x==1&&y==1)return 1;
14     for(int i=0;i<4;i++){
15         int nx=x+t[i],ny=y+t[i+4];
16         if(nx>0&&nx<=M&&ny>0&&ny<=M&&b[nx][ny]==b[x][y]-1)
17             if(print(nx,ny)){
18                 printf("(%d, %d)\n",x-1,y-1);
19                 return 1;
20             }         
21     }
22     return 0;
23 }
24 void bfs(){
25     while(!q.empty()){
26         int x=q.front();
27         q.pop();
28         int y=q.front();
29         q.pop();
30         for(int i=0;i<4;i++){
31             int nx=x+t[i],ny=y+t[i+4];
32             if(nx>0&&nx<=M&&ny>0&&ny<=M&&!a[nx][ny]&&(!b[nx][ny]||b[nx][ny]>b[x][y]+1)){
33                 q.push(nx),q.push(ny);
34                 b[nx][ny]=b[x][y]+1;
35             }
36         }
37     }
38 }
39 int main(){
40     for(int i=1;i<=M;i++)
41         for(int j=1;j<=M;j++)
42             cin>>a[i][j];
43     b[1][1]=1;
44     q.push(1),q.push(1);
45     bfs();
46     printf("(0, 0)\n");
47     print(5,5);
48     return 0;
49 }

 

posted @ 2021-08-13 19:15  Rekord  阅读(359)  评论(0编辑  收藏  举报