题目

//要仔细写的BFS,着重对#穿越的处理哦;

//花了几个小时终于把这道简单的BFS给弄好了,我果然还需要增加熟练度,需要再仔细一些;

//代码有点乱,但我不想改了,,,,,

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
struct tt
{
int x,y,step,floor;
};
int visit[][][],n,m,t;
char map1[][],map2[][];
queue <tt> q;
int xx[]={-,,,};
int yy[]={,,,-}; int bfs()
{
int i,flag;
tt front,temp;
temp.x=;temp.y=;temp.step=;temp.floor=;
q.push(temp);
visit[][][]=;
while(!q.empty())
{
front=q.front();
q.pop();
for(i=;i<;i++)
{ temp.x=front.x+xx[i];
temp.y=front.y+yy[i];
temp.step=front.step+;
temp.floor=front.floor;
if(temp.x>=&&temp.x<n&&temp.y>=&&temp.y<m)
{
if(temp.floor==&&visit[temp.x][temp.y][]==&&map1[temp.x][temp.y]!='*')
{
flag=;
visit[temp.x][temp.y][]=;
if(map1[temp.x][temp.y]=='P')
return temp.step; if(map1[temp.x][temp.y]=='#')
{
flag=;
if(map2[temp.x][temp.y]=='P')
return temp.step;
else if(map2[temp.x][temp.y]=='.'&&visit[temp.x][temp.y][]==)
{
temp.floor=;
q.push(temp); }
visit[temp.x][temp.y][]=;
}
if(flag==)
q.push(temp);
}
else if(temp.floor==&&visit[temp.x][temp.y][]==&&map2[temp.x][temp.y]!='*')
{
flag=; if(map2[temp.x][temp.y]=='P')
return temp.step; if(map2[temp.x][temp.y]=='#')
{
flag=;
if(map1[temp.x][temp.y]=='P')
return temp.step;
else if(map1[temp.x][temp.y]=='.'&&visit[temp.x][temp.y][]==)
{
temp.floor=;
q.push(temp); }
visit[temp.x][temp.y][]=;
} visit[temp.x][temp.y][]=;
if(flag==)
q.push(temp);
} }
}
}
return t+;
} int main()
{
int T,i,ans;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&t);
for(i=;i<n;i++)
{
scanf("%s",map1[i]);
}
for(i=;i<n;i++)
{
scanf("%s",map2[i]);
}
memset(visit,,sizeof(visit));
while(!q.empty())
q.pop();
ans=bfs();
if(ans<=t)
printf("YES\n");
else
printf("NO\n");
}
return ;
}

hdu 2102 A计划(BFS,基础)的更多相关文章

  1. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  2. hdu 2102 A计划-bfs

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  3. HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二

    思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...

  4. HDU 2102 A计划 (BFS或DFS)

    题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...

  5. HDU 2102 A计划(两层地图加时间限制加传送门的bfs)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  6. hdu 2102 A计划

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...

  7. hdu - 2102 A计划 (简单bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目还是不难,注意起点一定是(0,0,0),然后到达P点时间<=t都可以. 用一个3维字符数组存储图 ...

  8. hdu 2102 A计划(双层BFS)(具体解释)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...

  9. HDU 2102 A计划(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目大意:公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输 ...

随机推荐

  1. 单机版简单弹幕墙demo (jqery+bootstrap)

    最近在看fcc  ,上面有一个弹幕墙设计的题目,要求从后端获取数据,显示出来.百度,谷歌都没找到相关好的例子作为借鉴,索性按照自己的思路写了一个简单的demo  .在做demo的过程中遇到最大的问题就 ...

  2. 将string转换成char*

    string 是c++标准库里面其中一个,封装了对字符串的操作  把string转换为char* 有3中方法:  1.data  如:  string str="abc";  ch ...

  3. php下载文件,添加响应头

    //下载,添加响应头信息 header('Content-type:application/octet-stream'); header('Content-Disposition:attachment ...

  4. js 字符串“123”,变成整数123,不用parseInt 函数

    var s = "123"; console.log(s.charAt(0)*100+s.charAt(1)*10+s.charAt(2)*1);

  5. 《怎样实现通过shell脚本将用户踢出系统》

    下面是一个将用户踢出系统的脚本: #!/bin/bashread -p "input your username " userps aux | grep "^$user& ...

  6. 经典SQL语句大全 学者必看

    一.基础 .说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server --- 创建 ...

  7. Linux进程间通信方法总结

    ①匿名管道(pipe) 匿名管道(pipe)管道是一种半双工的通信方式,数据只能单向流动.如果要进行双工通信,需要建立两个管道.管道只能在具有亲缘关系的进程间使用,例如父子进程或兄弟进程. ②有名管道 ...

  8. react-native-vector-icons 安装

    react-native-vector-icons 是可以直接使用图片名就能加载图片的第三方,类似于web的iconfont矢量图,使用很方便, 你不需要在工程文件夹里塞各种图片, 节省很多空间,下面 ...

  9. @RenderSection与@RenderBody

    _LayoutMain: <html> <head> @RenderSection("head") </head> <body> @ ...

  10. Oracle利用数据泵迁移用户

    一.利用数据泵将数据导出 1.1.确定字符集: select * from v$nls_parameters; 或 select userenv('language') from dual; 1.2. ...