C++解决最基本的迷宫问题
问题描述:给定一个最基本的迷宫图,用一个数组表示,值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++解决最基本的迷宫问题的更多相关文章
- C++ 栈和典型迷宫问题
C++ 栈和迷宫问题 1. 前言 栈是一种受限的数据结构,要求在存储数据时遵循先进后出(Last In First Out)的原则.可以把栈看成只有一个口子的桶子,进和出都是走的这个口子(也称为栈顶) ...
- Python开发【数据结构】:基础
数据结构 什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构 N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程 ...
- 6_14 Abbott的复仇(UVa816)<图的最短路BFS>
1999次世界总决赛的比赛包括一个骰子迷宫问题.在这个问题被写的时候,法官们无法发现骰子迷宫概念的原始来源.不久之后的比赛,但是,罗伯特先生雅培,无数的迷宫和对作者的创造者主题,联系大赛评委,自称是骰 ...
- 【LeetCode】505. The Maze II 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS 日期 题目地址:https://leetcod ...
- BFS 、DFS 解决迷宫入门问题
问题 B: 逃离迷宫二 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5[提交][状态][讨论版] 题目描述 王子深爱着公主.但是一天,公主被妖怪抓走了,并且被关到了迷宫. ...
- 基于visual Studio2013解决C语言竞赛题之1082迷宫
题目 解决代码及点评 /************************************************************************/ /* ...
- golang数据结构之递归解决迷宫问题
简单来说:递归就是函数/方法自己调用自己,只是每次传入不同的变量. 递归可以解决各种数学问题:n皇后问题.阶乘问题.汉诺塔.迷宫问题.球和篮子问题等等: maze.go package maze im ...
- 有关dfs、bfs解决迷宫问题的个人见解
可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...
- 算法基础③--DFS解决迷宫问题入门
迷宫问题 通过深度优先搜索(DFS)方法实现. 迷宫问题一 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头 ...
随机推荐
- Cocos2d-x 学习笔记(21) ScrollView (CCScrollView)
1. 简介 CCScrollView.cpp文件内的滚动视图ScrollView直接继承了Layer+ActionTweenDelegate. 滚动视图能在屏幕区域内,用户通过触摸拖动屏幕,实现大于屏 ...
- urllib.request.urlretrieve()用于下载制定url内容到本地
函数:urllib.urlretrieve(url[, filename[, reporthook[, data]]]) 参数说明: url:外部或者本地url ,url中不要含有中文,好像会出错.f ...
- Mybatis-plus的两种分页插件的配置方式
第一种: package com.paic.ocss.gateway.admin.config; import com.baomidou.mybatisplus.plugins.PaginationI ...
- Mysql主从复制原理及搭建
## Mysql主从复制原理 主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.对于多级复制,数据库服务器即可充当主机,也可充当从 ...
- cucumber测试框架
1.1 什么是BDD(行为驱动开发) 首先了解一个概念,BDD(BehaviorDrivenDevelopment:行为驱动开发)为用户提供了从 开发人员和客户的需求创建测试脚本的机会.因此,开始时 ...
- UVA 10699 Count the factors 题解
Time limit 3000 ms OS Linux Write a program, that computes the number of different prime factors in ...
- Oracle - SQL语句实现数据库快速检索
SQL语句实现数据库快速检索 有时候在数据库Debug过程中,需要快速查找某个关键字. 1:使用PLSQL Dev自带的查找数据库对象,进行对象查找 缺点:查找慢.耗时. 2:使用SQL语句对数据库对 ...
- ios5与ios7数字输入样式一致
<input name="activeCode" id="activeCode" ontouchstart="this.type='numbe ...
- NLP(十八) 一维卷积网络IMDB情感分析
准备 Keras的IMDB数据集,包含一个词集和对应的情感标签 import pandas as pd from keras.preprocessing import sequence from ke ...
- 【selenium】- webdriver常见api
本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1.常见API 2.打开网址 3.操作浏览器 quit()没有完全关闭进程,依旧占用资源. 4.输入框操作 5.选择框操作 6.特殊窗口操作 ...