hdu1253胜利大逃亡(BFS)

http://acm.hdu.edu.cn/showproblem.php?pid=1253

View Code
 1 #include<stdio.h>

 2 #include<string.h>

 3 int a[51][51][51];

 4 struct node

 5 {

 6     int x,y,z,num;

 7 }q[50001];

 8 int p,d,f[51][51][51];

 9 int an[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};

10 int main()

11 {

12     int i,j,k,n,m,z,w,t,te;

13     scanf("%d", &t);

14     while(t--)

15     {

16         memset(f,0,sizeof(f));        

17         scanf("%d %d %d %d",&n,&m,&z,&te);

18         for(i = 1; i <= n ; i++)        

19             for(j = 1; j <= m ; j++)

20                 for(k = 1; k <= z ; k++)

21                     scanf("%d",&a[i][j][k]);        

22         if(n==1&&m==1&&z==1)

23         {

24             printf("0\n");

25             continue;

26         }    

27         if(a[n][m][z]==1)

28         {

29             printf("-1\n");

30             continue;

31         }    

32         int flag = 0;

33         p = 0;

34         d = 1;

35         q[d].x = 1;

36         q[d].y = 1;

37         q[d].z = 1;

38         q[d].num = 0;

39         while(p!=d)

40         {

41             p++;

42             if(q[p].num>te)//剪枝 大于时间退出 

43                 break;

44             if(q[p].z==z&&q[p].x==n&&q[p].y==m&&q[p].num<=te)

45             {

46                 flag = 1;

47                 break;

48             }        

49             for(i = 0 ;i < 6 ; i++)

50             {

51                 int tx = q[p].x+an[i][0];

52                 int ty = q[p].y+an[i][1];

53                 int tz = q[p].z+an[i][2];

54                 if(tx>0&&tx<=n&&ty>0&&ty<=m&&tz>0&&tz<=z&&!f[tx][ty][tz]&&a[tx][ty][tz]==0)

55                 {

56                     f[tx][ty][tz] = 1;

57                     q[++d].x = tx;

58                     q[d].y = ty;

59                     q[d].z = tz;

60                     q[d].num = q[p].num+1;

61                 }

62             }

63         }

64         if(flag)

65             printf("%d\n",q[p].num);

66         else

67             printf("-1\n");

68     }

69     return 0;

70 }

 

你可能感兴趣的:(HDU)