poj2251(BFS)
三位的bfs,跟二维的差不多
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 6 char map[35][35][35]; 7 int ans[35][35][35]; 8 int visited[35][35][35]; 9 int x1,y1,z1; 10 int x2,y2,z2; 11 int l,r,c; 12 int dir[6][3]={{1,0,0},{-1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}}; 13 struct node 14 { 15 int x; 16 int y; 17 int z; 18 int time; 19 }; 20 node path[100000]; 21 22 int bfs() 23 { 24 memset(visited,0,sizeof(visited)); 25 int head=0; 26 int tail=1; 27 path[head].x=x1; 28 path[head].y=y1; 29 path[head].z=z1; 30 path[head].time=0; 31 visited[x1][y1][z1]=1; 32 while(head<tail) 33 { 34 int x=path[head].x; 35 int y=path[head].y; 36 int z=path[head].z; 37 if(x==x2 && y==y2 && z==z2) 38 { 39 return path[head].time; 40 } 41 for(int i=0;i<6;i++) 42 { 43 int xx=x+dir[i][0]; 44 int yy=y+dir[i][1]; 45 int zz=z+dir[i][2]; 46 if(visited[xx][yy][zz]==0 && xx>=0 && xx<l && yy>=0 && yy<r && zz>=0 && zz<c && map[xx][yy][zz]!='#') 47 { 48 path[tail].x=xx; 49 path[tail].y=yy; 50 path[tail].z=zz; 51 path[tail].time=path[head].time+1; 52 visited[xx][yy][zz]=1; 53 tail++; 54 55 } 56 } 57 head++; 58 } 59 return -1; 60 } 61 62 int main() 63 { 64 char ch; 65 while(scanf("%d%d%d",&l,&r,&c)!=EOF) 66 { 67 getchar(); 68 if(l==0 && r==0 && c==0) break; 69 for(int i=0;i<l;i++) 70 { 71 for(int j=0;j<r;j++) 72 { 73 for(int k=0;k<c;k++) 74 { 75 scanf("%c",&ch); 76 map[i][j][k]=ch; 77 if(ch=='S') 78 { 79 x1=i; 80 y1=j; 81 z1=k; 82 } 83 if(ch=='E') 84 { 85 x2=i; 86 y2=j; 87 z2=k; 88 } 89 } 90 getchar(); 91 } 92 getchar(); 93 } 94 int ans=bfs(); 95 if(ans==-1) 96 { 97 printf("Trapped!\n"); 98 } 99 else 100 printf("Escaped in %d minute(s).\n",ans); 101 } 102 return 0; 103 }
每次代码写完总要出点小错误,唉,真的很麻烦啊,什么时候可以直接一次写成功啊,调试真的好痛苦啊,调试的水平是越来越高了