迷宫的最短路径 (BFS)
N*M的迷宫,从起点到终点,求最短距离
宽度优先搜索按照距开始状态由近及远的顺序进行搜索,因此可以很容易的用来求最短路径,最少操作之类问题的答案. (可以构造成pair或者编码成int来表达状态)
当状态更加复杂时,就需要封装成一个类来表示状态了.
虽然到达终点时就会停止搜索,可如果继续下去直到队列为空的话,就可以计算出各个位置的最短距离.此外,如果搜索到最后,d依然为INF的话,便可得知这个位置就是无法从起点发到达的位置.
const int INF = ; typedef pair<int,int> p;//使用pair表示状态时,使用typedef会更加方便一些 char maze[MAX_N][MAX_M+]; //表示迷宫的字符串的数组
int N,M;
int sx,sy; //起点坐标
int gx,gy; //终点坐标 int d[MAX_N][MAX_M+]; //表示迷宫的字符串的数组 int dx[]={,,-,}; //4个方向移动的向量
int dy[]={,,,-}; //求从(sx,sy)到(gx,gy)的最短距离
//如果无法到达,则是INF
int bfs()
{
queue<P> que;
//把所有的位置都初始化为INF
for(int i=; i<N; i++){
for(int j=; j<M; j++){
d[i][j]=INF;//将起点加入队列,并把这一地点的距离设置为0
}
}
que.push(P(sx,sy));
d[sx][sy]=; //不断循环直到队列的长度为0
while(que.size()){
//从队列的最前端取出元素
p=que.front();
que.pop();
//如果取出的状态已经是终点,则结束搜索
if(p.first==gx && p.second==gy)
break;
//四个方向
for(int i=; i<; i++){
int nx=p.first+dx[i];
int ny=p.second+dy[i];
//判断是否可以移动以及是否已经访问过(d[nx][ny]!=INF即为已经访问过)
if(<=nx && nx<N && <=ny && ny<M && maze[nx][ny]!='#' && d[nx][ny]==INF){
//可以移动的话,则加入到队列,并且到位置的距离确定为到p的距离+1
que.push(P(nx,ny));
d[nx][ny]=d[p.first][p.second]+;
}
}
}
return d[gx][gy];
} void solve(){
int ans=bfs();
printf("%d\n",ans);
}
迷宫的最短路径 (BFS)的更多相关文章
- 编程算法 - 迷宫的最短路径 代码(C++)
迷宫的最短路径 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定一个大小为N*M的迷宫. 迷宫由通道和墙壁组成, 每一步能够向邻接的上下 ...
- 数据结构实习 Problem H 迷宫的最短路径
数据结构实习 Problem H 迷宫的最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径. 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 ...
- POJ.3894 迷宫问题 (BFS+记录路径)
POJ.3894 迷宫问题 (BFS+记录路径) 题意分析 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, ...
- 最短路径——BFS算法
最短路径--BFS算法 单源最短路径问题 每对顶点间的最短路径 BFS求无权图的单源最短路径 bool visited[MAX_VERTEX_NUM]; //访问标记数组 //广度优先遍历 void ...
- hdu1728逃离迷宫 (利用最短路径思想+优先队列(BFS))
Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...
- 广度优先搜索(BFS)——迷宫的最短路径
宽度优先搜索按照距开始状态由近到远的顺序进行搜索,因此可以很容易的用来求最短路径,最少操作之类问题的答案. 宽度优先搜索介绍(一篇不错的文章). 题目描述: 给定一个大小为N*M的迷宫.迷宫有通道和墙 ...
- BFS求解迷宫的最短路径问题
题目:给定一个大小为N*M的迷宫,迷宫由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置.试求出起点到终点的最小步数.(本题假定迷宫是 ...
- 挑战程序设计——迷宫的最短路径(BFS)
题目详情 Description 给定一个大小为 N * M 的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的最小步数 限制条件: N,M <= ...
- POJ-3984 迷宫问题(BFS找最短路径并保存)
问题: 定义一个二维数组: 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, ...
随机推荐
- debain install scim
1. su input root pwd 2. apt-cache search scim apt-get install scim apt-cache search scim-pinyin apt- ...
- [LeetCode55]Jump Game
题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...
- Java DOM4J读取XML
DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,採用了Java集合框架并全然支持DOM,SAX和JA ...
- 注意事项: Solr设备 Hello World
试用 Solr-4.10.2 一 shards, 这两款机器 一是垃圾 rm -r example/solr/collection1/data/* 启动一个 node cd example java ...
- nyoj 题号12 水厂(两)——南阳oj
标题信息: 喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 有一块草坪.横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=1000 ...
- struts开发步骤
说来惭愧.这是一个简单的struts折腾了很长一段时间,几乎相同的时间量就花了三天时间来解决.下面的步骤总结一下我开发:(我使用的是MyEclipse); 1.新建一个Exercise3的web Pr ...
- Java中导入、导出Excel
原文:Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已 ...
- SQL Server数据库附加失败:错误5120和错误950
再次敲机房,想參考曾经的物理模型,结果在附加数据库这一环节出现了点问题,以下总结一下. 1.附加数据库失败,错误5120 对于这样的错误,我在网上搜集了一下,主要有下面几种解决的方法: 方法一:将要附 ...
- VS2015 C#6.0
VS2015 C#6.0 中的那些新特性 VS2015在自己机器上确实是装好了,(全部安装的话,在Java SE 开发工具包 会卡顿很长时间,我直接关闭,然后重启电脑,重新修复安装搞定), 想来体验一 ...
- 关于苹果公司最新的语言Swift
Swift供IOS和OSX新的编程语言开发的应用程序,吸取C和Objective-C质朴的语言.但没有损失C兼容性语言.Swift使用安全的编程模型.增加各种现代编程语言功能,使语言更容易掌握.更具可 ...