POJ
来源:互联网 发布:中国药科大学网络教育 编辑:程序博客网 时间:2024/06/05 00:24
定义一个二维数组:
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
解题思路:BFS+记忆路径,用多一个队列,记录经多的路径即可,结构体记录他的上一个结点是谁。
#include<iostream>#include<deque>#include<math.h>#include<vector>#include<memory.h>using namespace std;char maze[8][8];int mask[8][8];struct point{ int par; int x; int y; point(int a,int b,int c){ par=a; x=b; y=c; } point(){}};int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};deque<point> bfs(){ deque<point> que; deque<point> all; point start(-1,1,1); que.push_back(start); all.push_back(start); int index=0; while(!que.empty()){ point tp=que.front(); que.pop_front(); if(tp.x==5&&tp.y==5){ deque<point> tmp; while(tp.par!=-1){ tmp.push_back(tp); tp=all[tp.par]; } return tmp; } for(int i=0;i<4;i++){ if(maze[tp.x+dx[i]][tp.y+dy[i]]=='0'&&mask[tp.x+dx[i]][tp.y+dy[i]]==0){ mask[tp.x+dx[i]][tp.y+dy[i]]=1; point tt(index,tp.x+dx[i],tp.y+dy[i]); que.push_back(tt); all.push_back(tt); } } index++; } deque<point> aaa; return aaa;}int main(){ for(int i=0;i<=6;i++) for(int j=0;j<=6;j++){ maze[i][j]=1; } for(int i=1;i<=5;i++) for(int j=1;j<=5;j++){ cin>>maze[i][j]; } deque<point> l=bfs(); cout<<"(0, 0)"<<endl; for(int i=l.size()-1;i>=0;i--){ printf("(%d, %d)\n",l[i].x-1,l[i].y-1); } return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- Zookeeper原理架构
- 【Quartz】深入Job、JobDetail、JobDataMap、Trigger
- zabbix 报错
- Windows系统alt+数字键 的特殊字符集
- Log4j2实现不同线程不同级别日志输出到不同的文件中
- POJ
- 【Quartz】Spring3.2.9+Quqrtz2.2.1实现定时实例
- Leo_CT's Box
- webshell
- 基于Spring task注解方式配置任务
- opencv2.4.9+VS2013中imread和cvLoadimage的使用区别
- Matlab函数meshgrid的作用
- 如何在app中打开支付宝进行打赏开发者
- 【怎样写代码】小技巧 -- 关于引用类型的两种转换方式