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 }

每次代码写完总要出点小错误,唉,真的很麻烦啊,什么时候可以直接一次写成功啊,调试真的好痛苦啊,调试的水平是越来越高了

posted on 2012-08-16 18:33  矮人狙击手!  阅读(166)  评论(0编辑  收藏  举报

导航