迷宫问题
题目链接:
http://poj.org/problem?id=3984
解题思路:
bfs+打印路径。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
struct node{
int x,y;
int t;
bool operator < (const node &a)const{
return t > a.t;
}
}pa[10][10];
const int dx[] = {-1,0,1,0},dy[] = {0,-1,0,1};
int maze[10][10];
int vis[10][10];
node bfs(){
memset(vis,0,sizeof(vis));
vis[0][0] = 1;
priority_queue<node> q;
node cur;
q.push(node{0,0,0});
while(!q.empty()){
cur = q.top();
q.pop();
if(cur.x == 4 && cur.y == 4){
return cur;
}
for(int i = 0; i < 4; i++){
int xx = cur.x+dx[i],yy = cur.y+dy[i];
if(xx < 0 || xx >= 5 || yy < 0 || yy >= 5)
continue;
if(vis[xx][yy] || maze[xx][yy])
continue;
vis[xx][yy] = 1;
pa[xx][yy].x = cur.x;
pa[xx][yy].y = cur.y;
q.push(node{xx,yy,cur.t+1});
}
}
}
void printpath(int x,int y,int t){
if(t < 0)
return ;
printpath(pa[x][y].x,pa[x][y].y,t-1);
printf("(%d, %d)\n",x,y);
}
int main(){
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
scanf("%d",&maze[i][j]);
}
}
node ans = bfs();
printpath(ans.x,ans.y,ans.t);
return 0;
}