A计划
来源:互联网 发布:数据交换设备有哪些 编辑:程序博客网 时间:2024/04/28 15:53
A计划
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 8 Accepted Submission(s) : 3
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
Sample Input
15 5 14S*#*..#........****....#...*.P#.*..***.....*.*.#..
Sample Output
YES
//题意很简单,救公主,然后地图上有传送门,石头,起点,终点。用结构体做出包含有x,y,k,step的点,减掉传送门开启时对面不能是传送门和石头,石头就会被撞死,传送门就会永远传送。然后就可以压入开始的队列点,步数一定是要小于或者等于t的
#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define N 15using namespace std;int vist[2][N][N];char map[2][N][N];int m,n,t;int dir[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};struct node{ int x,y; int step; int k;};int check(int k,int x,int y){ if(x>=0&&x<n&&y>=0&&y<m&&map[k][x][y]!='*') return 1; return 0;}void bfs(node s1,node s2,int time){ node st,ed; queue<node>q; int i; memset(vist,0,sizeof(vist)); st.k=s1.k,st.x=s1.x,st.y=s1.y,st.step=0; vist[st.k][st.x][st.y]=1; q.push(st); while(!q.empty()) { st=q.front(); q.pop(); if(st.k==s2.k&&st.x==s2.x&&st.y==s2.y&&st.step<=t) { printf("YES\n"); return; } if(st.step>t) { printf("NO\n"); return; } for(i=0; i<4; i++) { ed.k=st.k; ed.x=st.x+dir[i][0]; ed.y=st.y+dir[i][1]; if(!vist[ed.k][ed.x][ed.y]&&check(ed.k,ed.x,ed.y)) { if(map[ed.k][ed.x][ed.y]=='#') { if(ed.k==0) ed.k=1; else ed.k=0; // 时空机 if(map[ed.k][ed.x][ed.y]=='*'||map[ed.k][ed.x][ed.y]=='#')//不仅不能传过去是石头,还不能是传送门 continue; } vist[ed.k][ed.x][ed.y]=1; ed.step=st.step+1; q.push(ed); } } } printf("NO\n");}int main(){ int c; int i,j,k; node s1,s2; scanf("%d",&c); while(c--) { scanf("%d%d%d",&n,&m,&t); for(k=0; k<2; k++) { for(i=0; i<n; i++) { scanf("%s",map[k][i]); } } for(k=0; k<2; k++) for(i=0; i<n; i++) for(j=0; j<m; j++) { if(map[k][i][j]=='S') { s1.x=i; s1.y=j; s1.k=k; } else if(map[k][i][j]=='P') { s2.k=k; s2.x=i; s2.y=j; } } bfs(s1,s2,t); } return 0;}
0 0
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A计划
- A - A计划
- 飞行游戏A计划
- A START 计划
- 51nod 1007正整数分组 题解
- 事实学习与语义集成调研
- Android必知必会-长按返回健退出
- Springjdbc jdbcTemplate查询相关问题
- 常用排序示例小结
- A计划
- libpcap学习
- Git 常用命令大全
- http://www.cnblogs.com/newflydd/p/4891922.html
- Mybatis 中#和$区别
- Docker-入门
- winpcap抓包示例源码
- Codeforces Round #358 (Div. 2) -- C. Alyona and the Tree (树上的DFS)
- HTML学习总结(5)- 表格,表单