HDU-2102 A计划
2015-09-26 00:04
281 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=2102题意:
从S搜索到E有两张图,#处可以转换到另一张图,求是否能在T时间内走到。思路:
就是基础的搜图,只是加了个两张图之间跳转罢了。代码:
#define N 112 int n,m; int flag,sum,ave,ans,res,len,ans1,ans2; int g[2] ,dir[4][2]={1,0,-1,0,0,1,0,-1}; char s[101]; struct node { int x,y,z,step; }tn,e; bool bfs() { queue<node>q; while(!q.empty())q.pop(); node a,b; tn.step=0; q.push(tn); while(!q.empty()) { a=q.front();q.pop(); if(a.x==e.x&&a.y==e.y&&a.z==e.z) return true; if(a.step==sum)continue; for(int i=0;i<4;i++) { b=a;b.x+=dir[i][0];b.y+=dir[i][1];b.step++; if(g[b.z][b.x][b.y]==2)b.z^=1; if(g[b.z][b.x][b.y]==1) { g[b.z][b.x][b.y]=0; q.push(b); } } } return false; } int main() { int i,j,k,kk,t,x,y,z; scanf("%d",&kk); while(kk--) { scanf("%d%d%d",&n,&m,&sum); memset(g,0,sizeof(g)); for(k=0;k<2;k++) for(i=0;i<n;i++) { scanf("%s",s); for(j=0;j<m;j++) { if(s[j]=='*')continue; if(s[j]=='S') tn.x=i+1,tn.y=j+1,tn.z=k; g[k][i+1][j+1]=1; if(s[j]=='P') e.x=i+1,e.y=j+1,e.z=k; if(s[j]=='#') g[k][i+1][j+1]=2; } } printf("%s\n",bfs()?"YES":"NO"); } return 0; }
相关文章推荐
- MongoDB默认配置
- adduser和useradd的区别
- 完全二叉树插入
- struts2修改默认后缀
- java面试题二十 try catch
- gentoo Wireless Configuration
- NFS根文件系统
- jQuery之元素的遍历与元素的过滤
- SiteMesh 使用与配置
- C# 生成系统唯一号
- Android中SurfaceView和view画出触摸轨迹
- JSP+EXt2.0实现分页的方法
- 动态JSP页生成静态HTML的方法
- ASP.NET Forms身份认证详解
- ASP.NET文件处理如何操作
- ASP.NET显示渐变图片实现方法
- 如何解决ASP.NET新增时多字段取值的问题
- ASP.NET GridView中加入RadioButton不能单选的解决方案
- 阿里云上从ASP.NET线程角度对“黑色30秒”问题的全新分析
- PHP弹出对话框技巧详细解读