定义一个二维数组:

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)

思路:广搜问题,关键是要在访问的同时记录路径,以便输出路径。

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;
int a[6][6],d[10][10],vis[6][6];
struct node
{
int r,c;
};
queue <node> que;
node father[10][10]; //记录父节点,方便打印
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
vector<node> nodes; //记录路径
void print(node u)
{
while(1)
{
nodes.push_back(u); //尾部加入元素
if(d[u.r][u.c]==0)
break; //头结点
u=father[u.r][u.c];
}
for(int i=nodes.size()-1;i>=0;--i)
printf("(%d, %d)\n",nodes[i].r,nodes[i].c); }
void bfs()
{
node zero;
zero.c=0,zero.r=0;
d[0][0]=0,vis[0][0]=1;
que.push(zero);
while(!que.empty())
{
node front=que.front();
que.pop();
if(front.r==4 && front.c==4)
{
print(front);
return;
}
for(int i=0;i<4;++i)
{
int x=front.r+dx[i]; //分别向上下左右访问
int y=front.c+dy[i];
node v;
v.r=x,v.c=y;
if(x>=0 && x<5 && y>=0 && y<5 && a[x][y]==0 && !vis[x][y])
{
d[x][y]=d[front.r][front.c]+1; //记录层数
father[x][y]=front; //记录父节点
vis[x][y]=1; //标记节点已经访问
que.push(v); //插入队列
}
}
}
}
int main()
{
for(int i=0;i<5;++i)
for(int j=0;j<5;++j)
scanf("%d",&a[i][j]);
bfs();
}

最新文章

  1. 解决关键SSL安全问题和漏洞
  2. tomcat apache 实现负载平衡的小demo
  3. Popline:帅气的浮动 HTML5 文本编辑器工具栏
  4. 利用jquery实现网站中对应栏目下面内容切换效果。
  5. MVC Pager 使用
  6. hdu 1247 map的使用
  7. JDBC编程步骤
  8. 批量修改文件后缀(Python)
  9. 分布式发布订阅消息系统 Kafka 架构设计
  10. js前端防止默认表单提交
  11. java中动态反射
  12. Android热更新开源项目Tinker集成实践总结
  13. poj3254Corn Fields题解
  14. linux使用进阶(一)
  15. MySQL 视图技术
  16. 蓝牙 - 小米手环3 NFC版BLE协议研究
  17. # 20175329 2018-2019-2 《Java程序设计》 第二周学习总结
  18. Windows Server 2003下DHCP服务器的安装与简单配置图文教程
  19. springBoot基础
  20. go语言中的方法method

热门文章

  1. UVA Jin Ge Jin Qu hao 12563
  2. 【iOS开发系列】九宫格布局
  3. TI C66x DSP 系统events及其应用 - 5.6(INTMUX)
  4. 基础树形DP小结
  5. HDU1561 The more, The Better
  6. I NEED A OFFER!(hdoj--1203--01背包)
  7. Springboot 之 引入Thymeleaf
  8. 利用网络Socket和多线程实现一个双向聊天
  9. 数据科学的完整学习路径(Python版)
  10. 树莓派-基于aria2实现离线下载