poj 3984 迷宫问题

来源:互联网 发布:matlab矩阵中最小值 编辑:程序博客网 时间:2024/06/05 05:32

poj   3984   迷宫问题                  题目链接:http://poj.org/problem?id=3984

                     

题目分析:求最短路径用BFS,需要存路径,定义跟图一样大的节点数组,存下每个节点走到时它的上一个点,再把这条路顺着存一遍。

code:

#include<cstdio>#include<cstring>#include<queue>using namespace std;bool vis[6][6],map[6][6];short dir[4][2]={1,0,-1,0,0,1,0,-1},n;struct node{short x,y,step;}pre[6][6],path[30];//存下来bool judge(int x,int y){return x<5&&y<5&&x>=0&&y>=0&&!map[x][y]&&!vis[x][y];}node bfs(){ queue<node>q;node first,next;first.x=0,first.y=0,first.step=0;vis[0][0]=true;q.push(first);while(!q.empty()){first=q.front();q.pop();for(int i=0;i<4;i++){next.x=first.x+dir[i][0];next.y=first.y+dir[i][1];if(judge(next.x,next.y)){next.step=first.step+1;pre[next.x][next.y]=first;//新的东西在这里if(next.x==4&&next.y==4)return next;q.push(next);vis[next.x][next.y]=true;}}}return first;}int main(){for(int i=0;i<5;i++){for(int j=0;j<5;j++){scanf("%d",&n);map[i][j]=n?true:false;}}node p=bfs();int s=p.step;for(int i=s;i>=0;i--){path[i]=p;p=pre[p.x][p.y];}for(int i=0;i<=s;i++){printf("(%d, %d)\n",path[i].x,path[i].y);}return 0;}
PS:这题除了打印路径,就没什么亮点了,把样例答案原样输出居然也能过,这些人真是有够无聊……学会BFS打印路径,就能兼具DFS和BFS的所有优点了。大笑是不是下一步要学A*了呢??







0 0
原创粉丝点击