(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,故这个 ...
随机推荐
- JavaWeb学习总结(三)—Servlet
1. 什么是Servlet * Servlet是JavaWeb三大组件之一(Servlet.Filter.Listener) ,Servlet是用来处理客户端请求的动态资源,按照一种约定俗成的称呼习惯 ...
- ajax发布评论 、显示评论
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- Android是如何绘制View的
当一个activity获得焦点时, 它会被要求绘制它的布局. Android框架将处理绘制的过程, 但是activity必须提供它的布局体系的根节点. 绘制将从根节点开始, 根节点被要求测量和绘制布局 ...
- retrifit
Retrofit 特点 性能最好,处理最快 使用REST API时非常方便: 传输层默认就使用OkHttp: 支持NIO: 拥有出色的API文档和社区支持 速度上比volley更快: 如果你的应用程序 ...
- aspcms网站访问出现3706错误, 错误描述:未找到提供程序。该程序可能未正确安装,解决的方法。
- Unity3D WebCamTexture 调用外部摄像头
http://www.itnose.net/detail/6259004.html 一:Unity 中使用WebCamTexture 调用摄像头实现拍照和摄像. using UnityEngine; ...
- 【CITE】C# 如何 实现一个窗体和另一个窗体始终保持相对的位置
C# 如何 实现一个窗体和另一个窗体始终保持相对的位置,任由一个窗体移动,当点击按钮时,弹出的另一个窗体也与之保持相对位置(如左上角)你根据第一个窗体的location去算第二个窗体的location ...
- canvas实现钟表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android利用V4包中的SwipeRefreshLayout实现上拉加载
基本原理 上拉加载或者说滚动到底部时自动加载,都是通过判断是否滚动到了ListView或者其他View的底部,然后触发相应的操作,这里我们以 ListView来说明.因此我们需要在监听ListView ...
- WLAN历史概述-01
无线网络介绍 无线网络的初步应用,可以追朔到第二次世界大战期间,当时美国陆军采用无线电信号做资料的传输.他们研发出了一套无线电传输科技,并且采用相当高强度的加密技术,得到美军和盟军的广泛使用.他们也许 ...