宽度搜索(BFS)中求最短路径问题理解记录
借助ACM1242题深入理解迷宫类最短路径搜索并记录路径长度的问题及解决方法;
这是初次接触优先队列,尤其是不知道该怎样去记忆在结构体重自定义大小比较的符号方向,很容易混淆符号向哪是从大到小排列,向哪是从小到大排列;
这非常向sort和qsort排序。
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1242
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=;
char map[N][N];
int vis[N][N];
struct Node
{
int x,y,step;
friend bool operator<(Node v,Node u)
{
return v.step>u.step;//怎么记啊
}
}XX;
int n,m;
int direction[][]={{,},{-,},{,},{,-}};
bool Check(int x,int y)
{
if(x<||y<||x>=n||y>=m||map[x][y]=='#'||!vis[x][y])
return false;
return true;
}
int dfs(Node S,Node E)
{
priority_queue<Node>Q;
S.step=;
Q.push(S);
Node temp;
vis[S.x][S.y]=;
while(!Q.empty())
{
Node mid;
mid=Q.top();
Q.pop();
if(mid.x==E.x&&mid.y==E.y)return mid.step;
for(int i=;i<;i++)
{
Node next=mid;
next.x=mid.x+direction[i][];
next.y=mid.y+direction[i][];
if(Check(next.x,next.y))
{
next.step++;
if(map[next.x][next.y]=='x')
next.step++;
if(vis[next.x][next.y]>next.step)//其实这步可以抛弃,只是增大下面优先队列的处理数据量
{
vis[next.x][next.y]=next.step;//其实也可以没有这一步
Q.push(next); }
}
}
}
return -;//返回它时说明无法到达目的地
}
int main()
{
while(cin>>n>>m)
{
memset(vis,,sizeof(vis));//这里用的memset将vis赋特别大的值 ;
//memset一般用于赋值是-1和零,也用于char型符号赋值,但是当赋值为其他int型整数时,
//所得到的结果并不是你所写上的数,就像上面写的1,其实结果是很大的数,可以输出试验下;
Node s;//起点位置
Node e;//终点位置
for(int i=;i<n;i++)
{
cin>>map[i];
for(int j=;j<m;j++)
if(map[i][j]=='a')
{
e.x=i;e.y=j;
}
else if(map[i][j]=='r')
{
s.x=i;
s.y=j;
}
else if(map[i][j]=='x')//是保存那个特出守卫的坐标的
{
XX.x=i;XX.y=j;
}
}
int time=dfs(s,e);
if(time==-)cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
else cout<<time<<endl;
}
}
做这个题目话费了我好长好长时间,现在也不是太懂,不过还好啦,最起码理解这种方法了;算是长能力了。哈哈哈!
宽度搜索(BFS)中求最短路径问题理解记录的更多相关文章
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- BFS - 求最短路径
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. ...
- 通俗易懂理解——dijkstra算法求最短路径
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止 ###基本思想 通过Dij ...
- 理解Lucene索引与搜索过程中的核心类
理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.Directory.Analyzer.Document.Field 1.IndexWriter IndexWr ...
- UVa 1599 理想路径(反向BFS 求最短路径 )
题意: 给定一个有重边有自环的无向图,n个点(2 <= n <= 100000), m条边(1 <= m <= 200000), 每条边有一个权值, 求从第一个点到n的最少步数 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 广度优先搜索 BFS 学习笔记
广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...
随机推荐
- 在Arch上安装VSCode的方法
首先去特硬去下载vscode的安装包 mkdir /tmp/vscode cd /tmp/vscode/ wget https://az764295.vo.msecnd.net/public/0.3. ...
- spark提交任务的两种的方法
在学习Spark过程中,资料中介绍的提交Spark Job的方式主要有两种(我所知道的): 第一种: 通过命令行的方式提交Job,使用spark 自带的spark-submit工具提交,官网和大多数参 ...
- smartgit 使用
合并分支
- 莱布尼兹三角形(C++)
[问题描述] 如下图所示的三角形,请编程输出图中排在第 n 行从左边数第 m 个位置上的数. [代码展示] # include<iostream># include<cstdio&g ...
- 基于freeRTOS定时器实现闹钟(定时)任务
基于freeRTOS定时器实现闹钟(定时)任务 在智能硬件产品中硬件中,闹钟定时任务是基本的需求.一般通过APP设置定时任务,从云端或者是APP直连硬件将闹钟任务保存在硬件flash中,硬件运行时会去 ...
- 深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
转载:http://zh.lucida.me/blog/java-8-lambdas-inside-out-library-features/ 关于 深入理解 Java 8 Lambda(语言篇——l ...
- HDU 3262/POJ 3829 Seat taking up is tough(模拟+搜索)(2009 Asia Ningbo Regional)
Description Students often have problems taking up seats. When two students want the same seat, a qu ...
- UVA 11922 Permutation Transformer(平衡二叉树)
Description Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. ...
- 20172330 2017-2018-1 《Java程序设计》第八周学习总结
学号 2017-2018-1 <程序设计与数据结构>第八周学习总结 教材学习内容总结 这一章主要是对多态性的学习: 由继承实现多态性 多态性引用能够随时间变化指向不同类型的对象. 对于多态 ...
- 自定义View 和 ViewGroup
一. 自定义View介绍 自定义View时, 继承View基类, 并实现其中的一些方法. (1) ~ (2) 方法与构造相关 (3) ~ (5) 方法与组件大小位置相关 (6) ~ (9) 方法与触摸 ...