博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3984迷宫问题 广搜+最短路径+模拟队列
阅读量:6699 次
发布时间:2019-06-25

本文共 1505 字,大约阅读时间需要 5 分钟。

转自:
 
定义一个二维数组: 
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 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0

Sample Output

(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)
 广度搜索还是老老实实用队列,可以采用模拟队列,自己记录队头和队尾,千万不要瞎试动态规划。。。。。。惨痛的教训。 输出路径的话可以反向追踪,从终点依次找到上一个点,直至原点。
参考代码:
1 #include
2 using namespace std; 3 int map[5][5]; 4 int vis[5][5]; 5 struct node{ 6 int x; 7 int y; 8 int pre; 9 }edge[100];10 int front=0,rear=1;//队头,队尾11 int dir[4][2]={
{
0,-1},{
1,0},{
0,1},{-1,0}};12 void f(int i)//倒向追踪法13 {14 if(edge[i].pre!=-1)15 {16 f(edge[i].pre);17 cout<<"("<
<<", "<
<<")"<
=5||y<0||y>=5||vis[x][y]==1||map[x][y]==1)33 continue;34 else35 {36 vis[x][y]=1;37 map[x][y]=1;38 edge[rear].x=x;//入队39 edge[rear].y=y;40 edge[rear].pre=front;41 rear++;42 }43 if(x==4&&y==4)44 f(front);45 }46 front++;//出队47 }48 }49 int main()50 {51 int i,j;52 for(i=0;i<5;i++)53 {54 for(j=0;j<5;j++)55 {56 cin>>map[i][j];57 }58 }59 memset(vis,0,sizeof(vis));60 cout<<"("<<"0, 0)"<

 

转载地址:http://mfmoo.baihongyu.com/

你可能感兴趣的文章
《游戏视频主播手册》——2.2 哪些人适合做游戏主播
查看>>
《Windows PowerShell实战指南(第2版)》——1.4 搭建自己的实验环境
查看>>
《C和C++代码精粹》——1.7 类型安全I/O
查看>>
机器学习自主解决安全威胁离我们还有多远?
查看>>
《编程珠玑(第2版•修订版)》—第2章2.2节无处不在的二分搜索
查看>>
时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速...
查看>>
当Terraform遇上ECS(一)——DataSource篇
查看>>
3月15日云栖精选夜读:双管齐下,MaxCompute数据上云与生态
查看>>
实时数据交换平台 - BottledWater-pg with confluent
查看>>
SpringMvc整合Quartz实现定时任务项目源码
查看>>
Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity)
查看>>
抽象工厂模式
查看>>
[原]小命令大作用:modprobe
查看>>
PropertyGrid控件 分类(Category)及属性(Property)排序
查看>>
属性动画基础之ValueAnimator
查看>>
登录失败时记住访问的地址
查看>>
基于用户投票的排名算法(一):Delicious和Hacker News
查看>>
JavaScript原生对象常用方法总结
查看>>
工作者对象HttpWorkerRequest
查看>>
云数据库·ApsaraDB 产品6月刊
查看>>