(BFS)hdoj1242-Rescue
初学BFS,第一次用BFS做题。题目就是一个基本的BFS模型,需要稍加注意的是遇到警卫时间要+1,以及最后比的是最短的时间而不是步数。
#include<cstdio>
#include<cstring>
#include<queue>
#define s 205
#define INF 100000
using namespace std;
struct lo//建立结构体,存储点坐标和某种方法走到这里话费的步数和时间
{
int x,y,step,time;
};
queue<lo> q;//建立队列,存放结点
int mintime[s][s],dir[][]={{,},{,-},{-,},{,}},m,n,si,sj,ei,ej;//si、sj存储起点,mintime存储到某点最短时间,初始化为INF
char tem[s][s];//存储地图
int BFS(lo x)
{
int i;
q.push(x);
lo hd;
while(!q.empty())//为找到最优解,需要等到队列为空才能停止
{
hd=q.front();//拿出队列头,从队列头的结点开始继续走。
q.pop();
for(i=;i<;i++)
{
int x=hd.x+dir[i][],y=hd.y+dir[i][];
if(x>=&&x<m&&y>=&&y<n&&tem[x][y]!='#')//如果朝某个方向走一步可行,那么就判断这样是否是最短。若是,则压入
{
lo t;
t.x=x;t.y=y;t.time=hd.time+;t.step=hd.step+;
if(tem[x][y]=='x') t.time++;//如果是警卫,时间要+1
if(t.time<mintime[x][y])//或许有走到这里时间更短的方法,但既然每种都放入了队列,后来都会从这里继续走
{mintime[x][y]=t.time;
q.push(t);
}
}
}
}
return mintime[ei][ej];//返回答案
}
int main()
{
while(~scanf("%d%d",&m,&n))
{
memset(tem,,sizeof(tem));
int i,j,an;
for(i=;i<m;i++)
{
scanf("%s",tem[i]);
}
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
mintime[i][j]=INF;//初始化时间都为INF
if(tem[i][j]=='a')
{
ei=i;ej=j;
}
else if(tem[i][j]=='r')
{
si=i;sj=j;
}
}
}
lo t;
t.x=si;t.y=sj;t.step=;t.time=;mintime[si][sj]=;
an=BFS(t);
if(an<INF)
printf("%d\n",an);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return ;
}
(BFS)hdoj1242-Rescue的更多相关文章
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
- POJ.1426 Find The Multiple (BFS)
POJ.1426 Find The Multiple (BFS) 题意分析 给出一个数字n,求出一个由01组成的十进制数,并且是n的倍数. 思路就是从1开始,枚举下一位,因为下一位只能是0或1,故这个 ...
随机推荐
- 原生js实现的效果
原生js实现tooltip提示框的效果 在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我 ...
- gdufs 1237 最优分解问题
题目链接:http://cstfs.gdufs.edu.cn:8080/JudgeOnline/problem.jsp?id=1237 (好像是内网的0.0) 简单来说,这道题目就是把一个数分解为若干 ...
- 发现easyui-accordion一个bug,在ie6、ie7不兼容性问题
当设置全局css文件单元格样式为下面时 td{ word-break: break-all; word-wrap: break-word;} easyui-accordion在ie6.ie7上面会出现 ...
- Android 数据库升级解决方案
转自:http://blog.csdn.net/leehong2005/article/details/9128501 请考虑如下情况: 在数据库升级时,不同版本的数据库,他们定义的表结构完全可能是不 ...
- JSP中RequestDispatcher的用法
RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中.RequestDispatcher接口中定义了两个方法:inclu ...
- CSS重置代码和常用公共代码
发的发生的发生法士大夫撒打发士大夫
- asmca无法创建ASM磁盘
现象 grid用户使用asmca无法创建asm磁盘,如下图 分析 如图所示,报错说是 Grid Infrastructure 出了问题.那么 Grid Infrastructure 是什么 ? 在安装 ...
- 自定义MVC Html
自定义ASP.NET MVC Html辅助方法 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我 ...
- What is the difference between extensibility and scalability?
You open a small fast food center, with a serving capacity of 5-10 people at a time. But you have en ...
- Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档
Nemo Documents – 给文件添加标签 scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...