nefu 1191 平行宇宙 (bfs)
Description
小k是时空贸易者,他经常在两个平行宇宙之间往来经商,现在他要从S点到达E点,问最少需要多长时间。(已知小k在同一个宇宙中只能向上下左右四个方向移动,每次移动需要1个单位时间,且不能在危险小行星带'#'中移动,遇到黑洞'O'时,他会被瞬间吸入另一个宇宙的对应的同一位置,比如从一个宇宙的黑洞处(2,2)必须且只能移动到另一个宇宙的(2,2)位置)
Input
多组输入数据,每组数据第一行包含两个整数n,m(2<=n,m<=1000),表示两个宇宙的大小。
接下来n行表示第一个宇宙,再接下来n行表示第二个宇宙。
Output
每组数据输出一个整数,表示最短时间,如果不能到达目的地,输出-1
Sample Input
4 6
#S##E#
#.##..
#.O.#.
#####. ######
#.####
#..O##
##...O
Sample Output
11 // 其实这题不难,但是要注意细节问题
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std; char data[][][];
int visit[][][];
int ki,kj,kk,ei,ej,ek;
int n,m;
int to[][]={{,},{,-},{,},{-,}}; struct node
{
int i;
int j;
int k;
int time;
}; int go(int i,int j,int k)
{
if(j>=&&j<n&&k>=&&k<m&&data[i][j][k]!='#')
return ;
return ;
} void bfs()
{
node st,ed;
queue <node> q;
st.i=ki;
st.j=kj;
st.k=kk;
st.time=;
memset(visit,,sizeof(visit));
visit[ki][kj][kk]=;
q.push(st);
while(!q.empty())
{
st=q.front();
q.pop();
if(st.i==ei&&st.j==ej&&st.k==ek)
{
cout<<st.time<<endl;
return ;
}
if(data[st.i][st.j][st.k]=='O')
{
int t=;
if(st.i==)
t=;
if(data[t][st.j][st.k]!='O'&&data[t][st.j][st.k]!='#'&&visit[t][st.j][st.k]==)
{
//O的对面是O或#时不能走
st.i=t;
visit[t][st.j][st.k]=;
}
else continue;//看队列中的下一个
}
for(int i=;i<;i++)
{
ed.i=st.i;
ed.j=st.j+to[i][];
ed.k=st.k+to[i][];
if(go(ed.i,ed.j,ed.k)&&visit[ed.i][ed.j][ed.k]==)
{
visit[ed.i][ed.j][ed.k]=;
ed.time=st.time+;
q.push(ed);
}
}
}
cout<<"-1"<<endl;
return ;
} int main()
{
while(cin>>n>>m)
{
for(int i=;i<;i++)
{
for(int j=;j<n;j++)
{
scanf("%s",data[i][j]);//减少时间
for(int k=;k<m;k++)
{
if(data[i][j][k]=='S')
{
ki=i;kj=j;kk=k;
}
if(data[i][j][k]=='E')
{
ei=i;ej=j;ek=k;
}
}
}
}
bfs();
}
return ;
}
nefu 1191 平行宇宙 (bfs)的更多相关文章
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- HDU--4784 Dinner Coming Soon DP+BFS
题意非常长非常变态.一个人要到他男朋友家,他最初有R元以及T分钟的时间来赶到他男朋友家.有N个房子M条道路,每条道路有须要消耗的时间以及过路费,同一时候还要顺路做食盐生意,起初身上没有食盐,最多带B袋 ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- Sicily 1215: 脱离地牢(BFS)
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...
- Sicily 1048: Inverso(BFS)
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
随机推荐
- 如何解决sql server定时作业调用Kettle job出错
错误信息: Unable to list jar files in plugin folder 'C:\Windows\system32\config\systemprofile\.kettle\pl ...
- 【故障】当Eclipse打不开的时候
某天,当你打开Eclipse的时候,弹出这种路径错误的界面.那么,该怎么办呢??? 参考: https://zhidao.baidu.com/question/1497777962705951219. ...
- laravel 安装 Laravel 扩展包
问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...
- php取整
php取整的方法一共有4中,分别是ceil(),floor(),round(),intval(). 1.ceil--向上取整,即不小于当前的下一个整数,如果有小数则进一位. 返回的是float类型 & ...
- <验证码的产生>C语言---验证码的产生和验证
无论在网页还是软件上登录时候都会遇到验证码的问题,不知道不懂其中奥秘的码友有没有兴趣一起来探讨一下. 其实并没有什么奥秘可言,就是产生随机数,然后让产生的随机数做为字符库(提前做好的数字字母字符串)的 ...
- centos6.5 安装ansible,管理多台服务器
安装python(最低2.6v) (1).python2.7安装 wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz # tar ...
- JS replace可以接受回调函数
这是js最鲜为人知的秘密之一,v 1.3首次引入.大部分情况下repalce的使用情况如下: '10 12 13 40 50'.replace(/\d+/g,'*');//用 * 替换所有的数字 这是 ...
- python基础-更新篇
对于windows来说就很简单了: 下载最新版本的python,然后卸载老版本,重新安装即可 对于linux系统的主机来说就有点复杂了: 现在linux主机自带的python版本都使2.x版的,而且L ...
- mvc log4net将日志写入数据库失败解决之道——开启内部调试
项目信息:spring mvc5 EF6 数据库:sql2008r2 log4net版本:1.2.10.0 第一天: 1.思路一:配了半天,一直无法写入数据库,网上搜了一大堆的资料,都没能解决,怀疑 ...
- GD库 图片缩略图 图片水印
/** * GD库 图片缩略图 *//*$image = imagecreatefromjpeg("1.jpg");var_dump($image);exit;$width = i ...