标签:style blog http color os io for art
题目地址:Dungeon Master
题目大意:
一个三维的图,‘.’代表空白的地方,“#”代表墙无法通过。从“S”地方开始,问你是否能达到“E”点,如果能输出多少时间,如果不能输出“Trapped!”。
解题思路:
搜索BFS。 刚开始vis数组标记的时候出现错误,只是在出队列的时候标记该点的坐标被访问,这样会导致,如果a(x,y,z)点没有出队列的时候,该点的vis情况还是为0,这时候如果有其他的点衍生出来的点还包括a点的话,a点还是会进队列,所以会MTL。 所以正常的标记vis,应该 在进队列的时候标记,这样始终保证队列里的点不会重复进入。
代码:
1 #include <algorithm> 2 #include <iostream> 3 #include <sstream> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cstdio> 7 #include <string> 8 #include <bitset> 9 #include <vector> 10 #include <queue> 11 #include <stack> 12 #include <cmath> 13 #include <list> 14 //#include <map> 15 #include <set> 16 using namespace std; 17 18 const int d1y[]= {0,-1,0,1}; 19 const int d1z[]= {-1,0,1,0}; 20 const int dx[]= {1,-1}; 21 int l,r,c; 22 char map[31][31][31]; 23 int b[31][31][31]; 24 int vis[31][31][31]; 25 int ce; 26 int ei,ej,ek; 27 int BFS(int x,int y,int z) 28 { 29 int i,j; 30 int xx,yy,zz; 31 queue<int >Q; 32 Q.push(x); 33 Q.push(y); 34 Q.push(z); 35 while(!Q.empty()) 36 { 37 xx=Q.front(); 38 Q.pop(); 39 yy=Q.front(); 40 Q.pop(); 41 zz=Q.front(); 42 Q.pop(); 43 // vis[xx][yy][zz]=1; 44 if (xx==ei&&yy==ej&&zz==ek) 45 { 46 ce=b[xx][yy][zz]; 47 return 0; 48 } 49 for(i=0; i<4; i++) 50 { 51 x=xx; 52 y=yy+d1y[i]; 53 z=zz+d1z[i]; 54 if (map[x][y][z]!=‘#‘&&x>=0&&x<l&&y>=0&&y<r&&z>=0&&z<c&&!vis[x][y][z]) 55 { 56 Q.push(x); 57 Q.push(y); 58 Q.push(z); 59 b[x][y][z]=b[xx][yy][zz]+1; 60 vis[x][y][z]=1; 61 } 62 } 63 for(i=0; i<2; i++) 64 { 65 x=xx+dx[i]; 66 y=yy; 67 z=zz; 68 if (map[x][y][z]!=‘#‘&&x>=0&&x<l&&y>=0&&y<r&&z>=0&&z<c&&!vis[x][y][z]) 69 { 70 Q.push(x); 71 Q.push(y); 72 Q.push(z); 73 b[x][y][z]=b[xx][yy][zz]+1; 74 vis[x][y][z]=1; 75 } 76 } 77 } 78 return 0; 79 } 80 int main() 81 { 82 while(scanf("%d%d%d",&l,&r,&c)&&(l+r+c)) 83 { 84 memset(map,0,sizeof(map)); 85 memset(b,0,sizeof(b)); 86 memset(vis,0,sizeof(vis)); 87 int i,j,k; 88 int si,sj,sk; 89 getchar(); 90 for(i=0; i<l; i++) 91 { 92 for(j=0; j<r; j++) 93 { 94 for(k=0; k<c; k++) 95 { 96 scanf("%c",&map[i][j][k]); 97 if (map[i][j][k]==‘S‘) 98 { 99 si=i; 100 sj=j; 101 sk=k; 102 } 103 if (map[i][j][k]==‘E‘) 104 { 105 ei=i; 106 ej=j; 107 ek=k; 108 } 109 } 110 getchar(); 111 } 112 getchar(); 113 } 114 ce=0; 115 BFS(si,sj,sk); 116 if (ce) 117 printf("Escaped in %d minute(s).\n",ce); 118 else 119 printf("Trapped!\n"); 120 } 121 return 0; 122 }
poj2251(Dungeon Master),布布扣,bubuko.com
标签:style blog http color os io for art
原文地址:http://www.cnblogs.com/ZhaoPengkinghold/p/3890539.html