C++迷宫最短路径问题BFS
标题
- 原题
- 思路
- 图解
- 代码
原题
思路
- 用dp数组和BFS(广度优先搜索)相结合的方法
- 先建立一个dp数组,把里面初始值都赋为-1,入口地址赋为0
- 通过队列,从入口开始,遍历它的上下左右四个方向,相当于向这个四个方向走了一步,每一个步的距离=上一个格子的距离+1
- 每走一步,就把当前位置加入队列。
- 重复3,4步,一直不断的循环。
①:如果存在出路,遇到出口位置就退出循环,然后return dp[出口地址];
②:如果不存在出路,因为,开始时,dp全都初始化为-1了,所以当循环完毕,队列为空时,也是return dp[出口地址],即-1
图解
代码
#include<iostream>
#include<queue>
using namespace std;
#define MAX_N 100char area[MAX_N][MAX_N]; //存放迷宫
int dp[MAX_N][MAX_N];
int n,m;
int Si,Sj,Ei,Ej; //起点和终点的地址
int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; //走的方向,下、右、上、左
int BFS(){queue<pair<int,int>> pre;dp[Si][Sj]=0; //出口距离赋为0pre.push(make_pair(Si,Sj));while(pre.size()){ //队列为空时,退出pair<int,int> p=pre.front();pre.pop();if(p.first==Ei && p.second==Ej) break; //该点为出口时,退出for(int i=0;i<4;i++){int nx=dx[i]+p.first,ny=dy[i]+p.second;//该点不能超出范围,不能是墙体,并且要没有走过if(nx>=0 && nx<n && ny>=0 && ny<m && dp[nx][ny]==-1 && area[nx][ny]!='#'){dp[nx][ny]=dp[p.first][p.second]+1; //该点距离=上一个点的距离+1pre.push(make_pair(nx,ny)); //放入队列}}}return dp[Ei][Ej]; //返回出口
}
int main(){int k;cin>>k;while(k){cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){dp[i][j]=-1; //给dp数组赋初值为-1cin>>area[i][j];if(area[i][j]=='S'){ //入口地址Si=i;Sj=j;}if(area[i][j]=='E'){ //出口地址Ei=i;Ej=j;}}}int res=BFS();cout<<res<<endl;k--;}return 0;
}
/*附上两个测试用例
5 5
S-###
-----
##---
E#---
---##
*/
/*
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...E#
*/
C++迷宫最短路径问题BFS相关推荐
- 【算法设计与分析】HDU-1108 C++诡异的楼梯(BFS迷宫最短路径)
一.题目描述 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里 ...
- 迷宫问题寻找最短路径(BFS)
目录导航 问题描述 BFS原理(BFS:广度优先搜索) Java实现 C++实现 问题描述 如下图,找到从(1,1)到(6,5)的最短路径. BFS原理(BFS:广度优先搜索) 故事设定:走格子策略为 ...
- java 迷宫最短路径_用Java实现迷宫最短路径算法
单源最短路(Bellman - Ford算法) 宽度优先搜索 迷宫最短路径用宽度优先搜索(bfs)相比用深度优先搜索(dfs)的好处在于bfs每次计算都是最短路径不存在重复计算,而dfs每计算出一条可 ...
- 迷宫最短路径问题(数据结构4.4.3 拓展)
这是对于邓俊辉老师的<数据结构>一书的4.4.3节的迷宫最短路径算法的自我拓展.在上一篇博客中,我提到本人用DFS算法尝试不出最短路径的解决方法,所以在此篇博客中,本人采用了BFS算法,并 ...
- Qt图形化界面—迷宫最短路径问题
这段时间为了日后的工作需要,遵循霍亚飞老师的<Qt Creator快速入门(第三版)>学了第一大章基础篇的知识,并根据所学的知识尝试性地将之前的迷宫最短路径问题进行了图形化界面的设计.由于 ...
- 任意大小迷宫自动生成+BFS寻路+生成无损迷宫bitmap(.BMP)图片
目录标题 迷宫游戏 迷宫的生成 BFS寻找路线 最后的一些细枝末节 如何使用程序 链接 I TURN COFFEE INTO CODE! 800x800迷宫自动解路径 镇楼图 https://pan. ...
- 多通路迷宫最短路径(寻路加找宝箱)
多通路迷宫最短路径找宝箱版 图示 寻路需求 演示代码 演示 图示 寻路需求 这次我们在一个多路径迷宫中放置几个宝箱 ,从起点出发找到所有的宝箱之后再寻路到终点. 演示代码 #!/usr/bin/pyt ...
- LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 Dijkstra 最短路径 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- POJ3984 迷宫问题【BFS】
好长时间没有敲过代码了,感觉之前学过的都忘了,趁着这个暑假,打算把之前学习的东西都复习一下,当然得慢慢来,毕竟好长时间不敲代码了,怎么着都有些生疏,再加上之前学的也不咋地,相当于回炉重造吧,见笑见笑. ...
最新文章
- 数据结构[栈与队列]的基本操作
- python编程有哪些-python编程工具有哪些
- JsRender (js模板引擎)
- 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你
- 关于.NET中的Server push技术
- linux限制普通账号使用sftp,CentOS6.2使用SFTP限制帐号SSH连接
- HDU - 2296 Ring(AC自动机+dp)
- python inspect —— 查看类的继承体系
- docker安装常用组件(mysql,redis,postgres,rancher,Portainer,蝉道,JIRA,sonarqube,Confluence,pgadmin4,harbor)
- 如何格式化电脑_内存卡格式化不了怎么办?教你两招
- 网页交互式MATLAB入门教程
- Maven系列(一) — Nexus 下载及配置
- 算法练习-珠心算测验
- python对大小写敏感吗_python中对于大小写是否敏感
- 【游戏客户端开发】Unity3D 学习笔记2——了解U3D引擎的操作面板和各种工具
- 加强中学理化生实验室建设要求,深化教学改革
- Booting kernel failed
- DoTween延时办法
- 『论文复现系列』3.Glove
- Linux卸载挂载点时,会遇到“device is busy”提示