poj 3984 迷宫问题
2014-02-22 12:33
344 查看
poj 3984 迷宫问题 题目链接:http://poj.org/problem?id=3984
![](https://img-blog.csdn.net/20140222123456750)
题目分析:求最短路径用BFS,需要存路径,定义跟图一样大的节点数组,存下每个节点走到时它的上一个点,再把这条路顺着存一遍。
code:
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
是不是下一步要学A*了呢??
题目分析:求最短路径用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的所有优点了。
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
是不是下一步要学A*了呢??
相关文章推荐
- 菜鸟说给菜鸟听之Beginning Linux Programming——Chapter1(1)
- sqlserver FOR XML PATH 语句的应用
- set_include_path在win和linux下的区别
- 浅析Cookie中的Path与domain
- cookie中的path与domain属性详解
- PHP include_path设置技巧分享
- 浅析JAVA_HOME,CLASSPATH和PATH的作用
- Canvas、Path 和 Paint 实例 (游戏开发必备)
- 自动生成AWR HTML报告
- 修改Tomcat的默认访问目录
- Linux安装JDK
- 在Linux里设置环境变量的方法(export PATH)--待修改
- 备忘:mac下配置JDK
- Android Studio - local path doesn't exist
- C# 获取Sqlite数据库路径的问题
- ServerVariables 对路径的操作
- 获取当前程序运行路径的函数
- 删除指定路径下指定天数之前(以文件的修改日期为准)
- FORFILES的用法
- ruby学习的一些收获