简单的走迷宫问题。给定一个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;
}