问题描述:给定一个最基本的迷宫图,用一个数组表示,值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 ;
}

C++解决最基本的迷宫问题的更多相关文章

  1. C++ 栈和典型迷宫问题

    C++ 栈和迷宫问题 1. 前言 栈是一种受限的数据结构,要求在存储数据时遵循先进后出(Last In First Out)的原则.可以把栈看成只有一个口子的桶子,进和出都是走的这个口子(也称为栈顶) ...

  2. Python开发【数据结构】:基础

    数据结构 什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构 N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程 ...

  3. 6_14 Abbott的复仇(UVa816)<图的最短路BFS>

    1999次世界总决赛的比赛包括一个骰子迷宫问题.在这个问题被写的时候,法官们无法发现骰子迷宫概念的原始来源.不久之后的比赛,但是,罗伯特先生雅培,无数的迷宫和对作者的创造者主题,联系大赛评委,自称是骰 ...

  4. 【LeetCode】505. The Maze II 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS 日期 题目地址:https://leetcod ...

  5. BFS 、DFS 解决迷宫入门问题

    问题 B: 逃离迷宫二 时间限制: 1 Sec  内存限制: 128 MB提交: 12  解决: 5[提交][状态][讨论版] 题目描述 王子深爱着公主.但是一天,公主被妖怪抓走了,并且被关到了迷宫. ...

  6. 基于visual Studio2013解决C语言竞赛题之1082迷宫

        题目 解决代码及点评 /************************************************************************/ /* ...

  7. golang数据结构之递归解决迷宫问题

    简单来说:递归就是函数/方法自己调用自己,只是每次传入不同的变量. 递归可以解决各种数学问题:n皇后问题.阶乘问题.汉诺塔.迷宫问题.球和篮子问题等等: maze.go package maze im ...

  8. 有关dfs、bfs解决迷宫问题的个人见解

    可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...

  9. 算法基础③--DFS解决迷宫问题入门

    迷宫问题 通过深度优先搜索(DFS)方法实现. 迷宫问题一 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头 ...

随机推荐

  1. java中安全的单例与不安全的单例

    java中安全的单例与不安全的单例 1.内部静态类(安全的) public class Singleton { private static class SingletonHolder{ privat ...

  2. 纯数据结构Java实现(2/11)(栈与队列)

    栈和队列的应用非常多,但是起实现嘛,其实很少人关心. 但问题是,虽然苹果一直宣传什么最小年龄的编程者,它试图把编程大众化,弱智化,但真正的复杂问题,需要抽丝剥茧的时候,还是要 PRO 人士出场,所以知 ...

  3. python编辑已存在的excel坑: BadZipFile: File is not a zip file

    背景-原代码如下,期望能自动创建excel,并且可以反复调用编辑: import xlwt,osfrom openpyxl.styles import Font, colors class Write ...

  4. Python学习 之 计算机基础

    第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 等组成,只有硬件但硬件之间无法进行交流和通信 1.2 操作系统 操作系统用于协同或控制硬 ...

  5. 实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

    最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...

  6. LightOJ - 1370 Bi-shoe and Phi-shoe 欧拉函数 题解

    题目: Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popula ...

  7. 深度学习常见的优化方法(Optimizer)总结:Adam,SGD,Momentum,AdaGard等

    机器学习的常见优化方法在最近的学习中经常遇到,但是还是不够精通.将自己的学习记录下来,以备不时之需 基础知识: 机器学习几乎所有的算法都要利用损失函数 lossfunction 来检验算法模型的优劣, ...

  8. Python数据分析之Pandas读写外部数据文件

    1 引言 数据分析.数据挖掘.可视化是Python的众多强项之一,但无论是这几项中的哪一项都必须以数据作为基础,数据通常都存储在外部文件中,例如txt.csv.excel.数据库.本篇中,我们来捋一捋 ...

  9. 牛客国庆集训派对Day6 A Birthday 费用流

    牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...

  10. lightoj 1226 - One Unit Machine(dp+大组合数去摸)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1226 题解:由于这些任务完成是有先后的所以最后一个完成的肯定是最后一个任务的子 ...