hdu 2102 A计划(优先队列+dfs)
改了好久,上午来实验室打出来了,运行就是不对,一直找啊找!还是没找到,最后突然停电了,打好的代码还没保存呢!
刚才来的时候又重新打了一遍!!!结果一个小小的错误wrong了好久!!!
在dfs值返回时两个NO的返回值不同写错了一个-100,一个-10,肯定不对了!!嘿嘿····,找到了,改了,提交了!对了!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
int x,y,k;
int time;
friend bool operator<(node a,node b)
{
return a.time>b.time;
}
};
int visit[20][20][2];
int n,m,endx,endy,endk,ti,startx,starty,startk;
char a[20][20],b[20][20];
int dir[4][2]={0,1,1,0,-1,0,0,-1};
int judge(int x,int y,int k)
{
if(x>=0&&x<n&&y>=0&&y<m)
{
if(k==0&&a[x][y]!='*')
return 1;
if(k==1&&b[x][y]!='*')
return 1;
}
return 0;
}
int dfs(int startx,int starty,int startk)
{
priority_queue<node>q;
node cur,next;
int i,x,y,k;
cur.x=startx;cur.y=starty;
cur.k=startk;cur.time=0;
visit[startx][starty][startk]=1;
q.push(cur);
while(!q.empty())
{
next=q.top();
q.pop();
if(next.x==endx&&next.y==endy&&next.k==endk)
return next.time;
if(next.time>=ti)
return -100;
for(i=0;i<4;i++)
{
x=next.x+dir[i][0];
y=next.y+dir[i][1];
k=next.k;
if(judge(x,y,k)&&visit[x][y][k]==0)
{
if(k==0&&a[x][y]=='#')
{
cur.time=next.time+1;
cur.k=1;
cur.x=x;cur.y=y;
q.push(cur);
visit[x][y][1]=1;
continue;
}
if(k==1&&b[x][y]=='#')
{
cur.time=next.time+1;
cur.k=0;
cur.x=x;cur.y=y;
q.push(cur);
visit[x][y][0]=1;
continue;
}
cur.time=next.time+1;
cur.k=next.k;
cur.x=x;cur.y=y;
visit[x][y][k]=1;
q.push(cur);
}
}
}
return -100;
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&ti);
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
scanf("%s",a[i]);
for(i=0;i<n;i++)
scanf("%s",b[i]);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(a[i][j]=='#'&&b[i][j]=='#')
{a[i][j]='*';b[i][j]='*';}
if(a[i][j]=='#'&&b[i][j]=='*')
a[i][j]='*';
if(a[i][j]=='*'&&b[i][j]=='#')
b[i][j]='*';
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(a[i][j]=='P')
{
endx=i;endy=j;endk=0;
}
if(b[i][j]=='P')
{
endx=i;endy=j;endk=1;
}
if(a[i][j]=='S')
{
startx=i;starty=j;startk=0;
}
if(b[i][j]=='S')
{
startx=i;starty=j;startk=1;
}
}
int ans;
ans=dfs(startx,starty,startk);
if(ans<=ti&&ans!=-100)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102
hdu 2102 A计划(优先队列+dfs)的更多相关文章
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 2102 A计划
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...
- HDU 2102 A计划(两层地图加时间限制加传送门的bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- hdu 2102 A计划 具体题解 (BFS+优先队列)
题目链接:pid=2102">http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 開始看到四分之中的一个的AC率感 ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2102 A计划(DFS)
题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...
- HDU 2102 A计划 (BFS或DFS)
题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...
- hdu 2102 a计划问题。。 双层dfs问题
Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长 ...
- HDU 2102 A计划 DFS与BFS两种写法 [搜索]
1.题意:一位公主被困在迷宫里,一位勇士前去营救,迷宫为两层,规模为N*M,迷宫入口为(0,0,0),公主的位置用'P'标记:迷宫内,'.'表示空地,'*'表示墙,特殊的,'#'表示时空传输机,走到这 ...
随机推荐
- iOS新上线注意事项
上传不出现构建版本 现在苹果要求先上传版本,然后在提交审核,但是现在经常上传完应用后,不出现构建版本,等待很久很久,也不出现,那么怎么解决,我告诉你~~尼玛的苹果是自己数据丢包了,结果就造成你不出现构 ...
- 安装ubuntu12.04LTS卡住以及花屏问题
昨天在XP下用grub4dos安装了ubuntu12.04LTS,总体上还算比较顺利,中途有碰到两个异常问题,解决了记录一下. 问题一:安装过程中读取ISO镜像文件时,卡在"checking ...
- android打造万能的适配器(转)
荒废了两天,今天与大家分享一个ListView的适配器 前段时间在学习慕课网的视频,觉得这种实现方式较好,便记录了下来,最近的项目中也使用了多次,节省了大量的代码,特此拿来与大家分享一下. 还是先看图 ...
- 用JavaScript探测页面上的广告是否被AdBlock屏蔽了的方法
每个人都讨厌广告.看电视.看电影.看优酷.看网页时,对满天飞的广告也是深恶痛绝.广告是一个不招人喜欢的东西.但是,对一个中小网站站长/博客主来说,广告几乎是唯一的能成支持网站/博客正常运转的资金来源. ...
- 虚拟机重复创建系统去除SID
我们安装完的操作系统都会有一个SID,为了简化安装,现在大部分人会选择GHOST克隆安装,经过克隆后的系统SID是相同的,有时需要重新获取SID 以前WIN2003有修改SID的工具NEWSID ...
- backbone案例
http://www.kuqin.com/webpagedesign/20120807/324101.html http://udonmai.com/code/todos-backbone%E6%A1 ...
- 保护模式下GDTR,LDTR,全局描述符表,局部描述符表和选择器的关系
这张图要注意:右边两个0-15,其中上面的是LDTR, 下面的是选择子. 图下第五个标线,是两个线交叉的,实际上第五个线是指向右边水平的那个线. 没有箭头的两组线分别表示GDT的区间,LDT的区间 ...
- Cocos2d-x CCEditBox & CCTextFieldTTF
下面简单记录一下如何Cocos2d-x中创建输入编辑框.在引擎中为我们提供了这样两个类:CCEditBox 和 CCTextFieldTTF. 一.CCEditBox ①这个类文件的位置 ②这个类 ...
- 学习kernel编程的建议
我把我学习kernel编程的过程介绍给大家,希望大家有个参考. 学习kernel编程需要阅读大量的kernel方面的书籍,在此我列举一下我读过的kernel书籍(按时间先后顺序),并给一些建议. 1. ...
- VJ1061迎春舞会之三人组舞
题目链接 推了半个下午..写的三重超时了 加了点单调队列的思想 优化了下过了 dp[i][j] 第二组的最右边的人选第J个人 那最左边肯定选第j-1个人 肯定是选相邻的 dp[i][j] = min ...