A计划hdu2102
2016-07-26 09:27
225 查看
A计划
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
可怜的fish在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的他再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉fish,因为他听信谣言说吃fish的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救fish。不过fish早已习以为常,他深信智勇的骑士LJ肯定能将他救出。
现据密探所报,fish被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),fish的位置用P表示,时空传输机用# 表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N* M(1 <= N,M <=10) 。T如上所意。接下去的前N* M表示迷宫的第一层的布置情况,后N* M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到fish就输出“YES”,否则输出“NO”。
Sample Input
5 5 14
S*#*.
.#…
…..
**.
…#.
..*.P
…*.
*.#..
Sample Output
题意:求出从S出发能否在t秒内到达P
注意 ‘#’的对应层如果还是‘#’,那么这个地方就无法过去了 。搜到的最少的耗时T如果大于t那么答案为“NO”
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
可怜的fish在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的他再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉fish,因为他听信谣言说吃fish的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救fish。不过fish早已习以为常,他深信智勇的骑士LJ肯定能将他救出。
现据密探所报,fish被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),fish的位置用P表示,时空传输机用# 表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N* M(1 <= N,M <=10) 。T如上所意。接下去的前N* M表示迷宫的第一层的布置情况,后N* M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到fish就输出“YES”,否则输出“NO”。
Sample Input
1
5 5 14
S*#*.
.#…
…..
**.
…#.
..*.P
.*..
*..…*.
*.#..
Sample Output
YES
题意:求出从S出发能否在t秒内到达P
注意 ‘#’的对应层如果还是‘#’,那么这个地方就无法过去了 。搜到的最少的耗时T如果大于t那么答案为“NO”
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<cstring> using namespace std; char mp[3][100][100]; bool vis[3][100][100]; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; struct data { int x,y,z,cost; }st,en; queue<data>que; int n,m,t; bool ok(int x,int y) { if(x<0||x>=n||y<0||y>=m) return 0; return 1; } void bfs() { while(!que.empty()) { que.pop(); } memset(vis,0,sizeof vis); que.push(st); vis[st.z][st.x][st.y]=1; while(!que.empty()) { data now=que.front(); que.pop(); // printf("x:%d n:%d y:%d m:%d z:%d\n",now.x,n,now.y,m,now.z); if(mp[now.z][now.x][now.y]=='P') { //printf("cost:%d\n",now.cost); if(now.cost<=t) { puts("YES"); return ; } break; } for(int i=0;i<4;i++) { data ne=now; ne.x+=dx[i]; ne.y+=dy[i]; ne.cost++; // printf("%d %d %d\n",ne.x,ne.y,ne.z); if(!ok(ne.x,ne.y)) { continue; } if(mp[ne.z][ne.x][ne.y]=='#') { ne.z=1-ne.z; if(mp[ne.z][ne.x][ne.y]=='#') continue; } if(vis[ne.z][ne.x][ne.y]) continue; if(mp[ne.z][ne.x][ne.y]=='*') continue; // printf("x:%d y:%d z:%d %c\n",ne.x,ne.y,ne.z,mp[ne.z][ne.x][ne.y]); vis[ne.z][ne.x][ne.y]=1; que.push(ne); } } puts("NO"); } int main() { int T; scanf("%d",&T); // getchar(); while(T--) { memset(vis,0,sizeof vis); scanf("%d%d%d",&n,&m,&t); // printf("n:%d m:%d t:%d\n",n,m,t); for(int i=0;i<2;i++) { for(int j=0;j<n;j++) { scanf("%s",mp[i][j]); for(int k=0;k<m;k++) { if(mp[i][j][k]=='S') { st.z=i; st.x=j; st.y=k; st.cost=0; } else if(mp[i][j][k]=='P') { en.z=i; en.x=j; en.y=k; en.cost=0; } } } } // puts("----"); // for(int i=0;i<2;i++) // { // for(int j=0;j<n;j++) // { // for(int k=0;k<m;k++) // { // printf("%c",mp[i][j][k]); // } // puts(""); // } // // } //puts("----"); // printf("st x:%d y:%d z:%d\n",st.x,st.y,st.z); bfs(); // puts("haha"); } return 0; }
相关文章推荐
- Docker成长之路(一) :Docker介绍安装
- IONIC----06.menu-tab
- HDU 3791 二叉搜索树(用数组保存树)
- SVN-查看两版本区别
- 执行GP工具
- STM32之CAN ---CAN ID过滤器分析
- 计算机右键-管理打不开解决办法
- 如何在生产环境中运行Docker容器
- Cpp环境【POJ3045】【Vijos2982】Cow Acrobats 牛的杂技套路
- 光线跟踪引擎做到了
- Android App应用启动分析与优化
- 【HDU 1159】Common Subsequence(最长公共序列LCS算法)
- au3
- Signalr如何在服务器端主动发送消息到客户端
- Volley 启动流程
- 关于C++ string和c类型字符数组的对比
- tomcat服务器和jboss服务器重启命令
- 搜索自己博客中的文章
- canvas1
- 十分钟玩转 jQuery、实例大全