BFS--hdoj2102
来源:互联网 发布:lol s8 知乎 编辑:程序博客网 时间:2024/06/05 20:09
A计划
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7518 Accepted Submission(s): 1787
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
一道简单的bfs,但还是花了较长时间修改细节,以后在这方面还要下功夫,这次因为getchar的问题,wa了n遍。
这道题要注意,传送门必须上下,而且上面不能是墙,也不能是传送门。
#include<iostream>#include<queue>#include<cstring>#include<cstdio>using namespace std;int maze[5][15][15];int vis[5][15][15];int dx[]= {0,0,1,-1};int dy[]= {1,-1,0,0};int n,m,t;int sx,sy,sz,ex,ey,ez;struct A{ int x,y,z,time;};void BFS(int x,int y,int z,int num){ queue<A> prin; A a; a.x=x,a.y=y,a.z=z,a.time=num; vis[a.z][a.x][a.y]=1; prin.push(a); while(!prin.empty()) { a=prin.front(); prin.pop(); if(a.x==ex&&a.y==ey&&a.z==ez&&(a.time<=t)) { cout<<"YES"<<endl; return; } A b; //cout<<a.x<<' '<<a.y<<endl; for(int i=0; i<4; i++) { b.x=a.x+dx[i]; b.y=a.y+dy[i]; //cout<<b.x<<' '<<b.y; if((b.x>=0)&&(b.x<n)&&(b.y>=0)&&(b.y<m)&&(maze[a.z][b.x][b.y]==1)&&(!vis[a.z][b.x][b.y])) { //cout<<1; if((maze[!a.z][b.x][b.y]!=-1)&&(maze[!a.z][b.x][b.y]!=1)&&(!vis[!a.z][b.x][b.y])) { b.z=!a.z; b.time=a.time+1; vis[b.z][b.x][b.y]=1; prin.push(b); //cout<<1; } } else if((b.x>=0)&&(b.x<n)&&(b.y>=0)&&(b.y<m)&&(maze[a.z][b.x][b.y]==0)&&(!vis[a.z][b.x][b.y])) { b.z=a.z; b.time=a.time+1; vis[b.z][b.x][b.y]=1; prin.push(b); } } } cout<<"NO"<<endl;}int main(){ //freopen("in.txt","r",stdin); int c; char x; cin>>c; while(c--) { cin>>n>>m>>t; getchar(); memset(maze,-1,sizeof(maze)); memset(vis,0,sizeof(vis)); for(int k=0; k<2; k++) for(int i=0; i<n; i++) for(int j=0; j<m; j++) { cin>>x; //getchar(); //vis[k][i][j]=100; if(x=='#') maze[k][i][j]=1; else if(x=='.') maze[k][i][j]=0; else if(x=='S') { maze[k][i][j]=0; sx=i; sy=j;sz=k; } else if(x=='P') { maze[k][i][j]=0; ex=i; ey=j;ez=k; } } BFS(sx,sy,sz,0); } return 0;}
- BFS--hdoj2102
- HDOJ2102 A计划
- hdoj2102 -- A计划
- HDOJ2102 深搜DFS解法+剪枝优化 入门题
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- BFS
- BFS
- BFS
- iOS定位原理和使用建议
- UVA 10340 - All in All 水~
- Spring三种实例化方法
- 稀疏矩阵的十字链表存储
- 利用php+mcDropdown实现文件路径可在下拉框选择
- BFS--hdoj2102
- seo经验分享 也许对你们有帮助
- Ant使用教程Eclipse下
- Rest API 概述
- 【综述】(MIT博士)林达华老师-"概率模型与计算机视觉”
- 在Winform动态启动、控制台命令行的方法
- 使用 CXF 做 webservice 简单例子
- 稀疏矩阵的十字链表存储的思路
- C/C++字符变量无法显示的问题