改了好久,上午来实验室打出来了,运行就是不对,一直找啊找!还是没找到,最后突然停电了,打好的代码还没保存呢!

刚才来的时候又重新打了一遍!!!结果一个小小的错误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)的更多相关文章

  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计划

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

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

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

  4. hdu 2102 A计划 具体题解 (BFS+优先队列)

    题目链接:pid=2102">http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 開始看到四分之中的一个的AC率感 ...

  5. [HDU 2102] A计划(搜索题,典型dfs or bfs)

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

  6. HDU 2102 A计划(DFS)

    题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...

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

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

  8. hdu 2102 a计划问题。。 双层dfs问题

    Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长 ...

  9. HDU 2102 A计划 DFS与BFS两种写法 [搜索]

    1.题意:一位公主被困在迷宫里,一位勇士前去营救,迷宫为两层,规模为N*M,迷宫入口为(0,0,0),公主的位置用'P'标记:迷宫内,'.'表示空地,'*'表示墙,特殊的,'#'表示时空传输机,走到这 ...

随机推荐

  1. Yours 的博客开张啦!

    虽然申请博客已经1个月了,但是一直没有来写,没办法,题都刷不完,哪有心思写啊``` 现在集训终于完了,有了属于自己的时间了.所以该把以前做的题,学的算法好好的整理整理了.一来顺顺思路,二来也可以给后来 ...

  2. [杂题]CSUOJ1276 Counting Route Sequence

    题目链接 题意:从1号点走到n号点(每条边只能走一次, 两结点间的边数必定为奇数) 问 经过结点不同顺序的方式有多少种(如1->2->3->4和1->3->2->4 ...

  3. GridView 根据要求显示指定值

    最近在写一个小项目用来练手恢复一下功力的,在Users表中有一个用户字段是状态,我使用"0"表示启用,“1”表示禁用, 存到数据库中, 由于之前有一段时间没写代码了,所以有点生疏了 ...

  4. Java Vector 类

    Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...

  5. TYPE C PD测试板 UFP测试板

  6. 《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示

    原文:<ArcGIS Engine+C#实例开发教程>第八讲 属性数据表的查询显示 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与Page ...

  7. C语言中的宏总结

    宏定义分为两种: 1.变量式宏定义,如 #define abc def #define str "string" #define num 100 2.函数式宏定义, #define ...

  8. 关于mIdleHandlers 空闲消息

    模拟情况说明 创建一个handler对象 该handler持有的是主线程 1.先发送一个延时20秒的message what=35;2.紧接着又发送一个延时10秒的Runnable3.在该Runnab ...

  9. Sublime Text修改显示图标

    选择喜欢的图片 首先你需要选择一个中意的图片做为新的图标,格式可以是png,jpg,gif的 转为ico格式 我们需要ico格式的图片,所以需要将上述的图片转换一下格式.同样,转ico格式的软件很多, ...

  10. Oracle查询经典

    .检索部门编号.部门名称.部门所在地及其每个部门的员工总数. select d.deptno,d.dname,d.loc,count(*) from emp e,dept d where e.dept ...