poj 3984:迷宫问题

来源:互联网 发布:用友软件t3普及版 编辑:程序博客网 时间:2024/06/05 03:32

简单的走迷宫问题。给定一个5*5的迷宫,以0表示通路,以1表示墙,保证有唯一通路,求该通路。

 

直接bfs,没什么好说的。


#include <cstdio>#include <cstring>#include <stack>#include <queue>#include <iostream>using namespace std;typedef struct coordinate{int x,y;int pre_x,pre_y;}co;bool maze[10][10];co path[10][10];queue <co> que;stack <co> way;int main(){co z={0,0,-1,-1};que.push(z);path[0][0]=z;memset(maze,0,sizeof(maze));for(int i=0;i<5;i++){for(int j=0;j<5;j++){int xx;cin>>xx;if(xx==1) maze[i][j]=1;}}while(!que.empty()){z=que.front();que.pop();maze[z.x][z.y]=1;if(z.x==4 && z.y==4){way.push(z);break;}if(z.x+1>=0 && z.x+1<=4 && !maze[z.x+1][z.y]){path[z.x+1][z.y].x=z.x+1;path[z.x+1][z.y].y=z.y;path[z.x+1][z.y].pre_x=z.x;path[z.x+1][z.y].pre_y=z.y;que.push(path[z.x+1][z.y]);}if(z.x-1>=0 && z.x-1<=4 && !maze[z.x-1][z.y]){path[z.x-1][z.y].x=z.x-1;path[z.x-1][z.y].y=z.y;path[z.x-1][z.y].pre_x=z.x;path[z.x-1][z.y].pre_y=z.y;que.push(path[z.x-1][z.y]);}if(z.y+1>=0 && z.y+1<=4 && !maze[z.x][z.y+1]){path[z.x][z.y+1].x=z.x;path[z.x][z.y+1].y=z.y+1;path[z.x][z.y+1].pre_x=z.x;path[z.x][z.y+1].pre_y=z.y;que.push(path[z.x][z.y+1]);}if(z.y-1>=0 && z.y-1<=4 && !maze[z.x][z.y-1]){path[z.x][z.y-1].x=z.x;path[z.x][z.y-1].y=z.y-1;path[z.x][z.y-1].pre_x=z.x;path[z.x][z.y-1].pre_y=z.y;que.push(path[z.x][z.y-1]);}}co a;for(a=way.top();a.pre_x!=-1 && a.pre_y!=-1;way.push(a)){a=path[a.pre_x][a.pre_y];}for(;!way.empty();way.pop()){printf("(%d, %d)\n",way.top().x,way.top().y);}return 0;}


0 0