问题描述:给定一个最基本的迷宫图,用一个数组表示,值0表示有路,1表示有障碍物,找一条,从矩阵的左上角,到右下角的最短路。求最短路,大家最先想到的可能是用BFS求,本文也是BFS求最短路的。

源代码如下:

 /*
使用BFS解决迷宫问题 **/
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct MaNode{
int x;
int y;
MaNode *pre;
MaNode(int x1=,int y1=,MaNode *p =NULL ):x(x1),y(y1),pre(p)
{
}
};
const int maxr=;
const int maxc=;
queue<MaNode*> qmaze;
vector<MaNode*> vemaze; //保存节点,以便释放 int maze[maxr][maxc] = {
,,,,,
,,,,,
,,,,,
,,,,,
,,,,,
};
void visit(int x,int y, MaNode *p ) //访问节点
{
struct MaNode *p2 = new MaNode(x,y,p);
//p2->x = x;
//p2->y =y;
// p2->pre = p;
maze[x][y] = ; //标识已经访问
qmaze.push(p2);
}
void bfs() // 宽度优先搜索
{
MaNode *head = new MaNode;
qmaze.push(head);
while( !qmaze.empty() )
{
MaNode *p= qmaze.front();
//int x= p->x+1;
//int y= p->y+1;
vemaze.push_back(p);
qmaze.pop();
if( p->x ==maxr- && p->y==maxc- )
{
break;
}
if(p->x + <=maxr && maze[p->x+][p->y] == )
{
visit(p->x+,p->y,p);
}
if(p->y+ <=maxc&& maze[p->x][p->y+] == )
{
visit(p->x,p->y+,p);
}
if( p->x- >= && maze[p->x-][p->y] == )
{ visit(p->x-,p->y,p);
}
if( p->y- >= && maze[p->x][p->y-] == )
{ visit(p->x,p->y-,p);
} } }
void printPath() //打印路径
{
MaNode *p = vemaze[vemaze.size()-];
while( p != NULL )
{
cout<<"("<<p->x<<","<<p->y<<")"<<endl; p=p->pre;
}
//cout<<endl;
}
void destroy() //销毁节点
{
for(size_t i=; i<vemaze.size() ; i++ )
{
delete vemaze[i];
}
}
int main()
{ bfs();
printPath();
destroy();
return ;
}

最新文章

  1. ViewPager自动轮播
  2. iOS--KVO的概述与使用
  3. vs创建项目模板和项模板
  4. 如何做好GPS平台软硬件集成测试
  5. Docker探索系列1之docker入门安装与操作
  6. 给jar包进行数字签名(2014-06-28记)
  7. JSP/ Servlet常见的中文乱码原因
  8. Mysql 的字符编码机制、中文乱码问题及解决方案【转载】
  9. python实现多变量线性回归(Linear Regression with Multiple Variables)
  10. Chris Richardson微服务翻译:微服务架构中的服务发现
  11. BZOJ_5301_[Cqoi2018]异或序列&amp;&amp;CF617E_莫队
  12. JDK命令行(jps、jstat、jinfo、jmap、jhat、jstack、jstatd、hprof)与JConsole
  13. 毫秒转时间(java.js)
  14. 最美应用API接口分析
  15. Bazel
  16. 阿里春招Android面经
  17. ThinkPad 预装win8换win7(软激活)
  18. BAT脚本编写教程简单入门篇
  19. 【20181026T1】**手枪【dfs】
  20. 洛谷 P3285 / loj 2212 [SCOI2014] 方伯伯的 OJ 题解【平衡树】【线段树】

热门文章

  1. rwcheck:为嵌入式设备设计的读写压测工具
  2. pyinstaller打包django项目成exe以及遇到的一些问题
  3. SpringBoot 内部方法调用,事务不起作用的原因及解决办法
  4. 常用Http status code 如何记
  5. 随笔编号-15 重构--改善既有代码的设计--Day01--学习笔记
  6. 设计模式(C#)——07装饰者模式
  7. Codeforces 814C
  8. three.js实现球体地球2018年全球GDP前十国家标记
  9. Leetcode之二分法专题-374. 猜数字大小(374. Guess Number Higher or Lower)
  10. JavaScript Array 数组方法汇总