HDU 1253 胜利大逃亡(BFS)
这个题,数据很变态。。WA了N次。。。看DISCUSS,过的。
1 #include <stdio.h> 2 #include <string.h> 3 #define N 125001 4 int p[60][60][60],o[60][60][60]; 5 int qua[N],qub[N],quc[N]; 6 int x[7] = {0,0,0,0,-1,1}; 7 int y[7] = {1,-1,0,0,0,0}; 8 int z[7] = {0,0,1,-1,0,0}; 9 int main() 10 { 11 int i,j,k,a,b,c,t,time,zz,start,end,num; 12 scanf("%d",&t); 13 while(t--) 14 { 15 memset(p,0,sizeof(p)); 16 memset(o,0,sizeof(o)); 17 scanf("%d%d%d%d",&a,&b,&c,&time); 18 for(i = 0;i <= a-1;i ++) 19 { 20 for(j = 0;j <= b-1;j ++) 21 { 22 for(k = 0;k <= c-1;k ++) 23 { 24 scanf("%d",&p[i][j][k]); 25 if(p[i][j][k]) 26 o[i][j][k] = 1; 27 } 28 } 29 } 30 o[0][0][0] = 1; 31 qua[0] = qub[0] = quc[0] = 0; 32 start = end = 0; 33 zz = 0;num = 0; 34 if(a == 1&&b == 1&&c == 1) 35 { 36 printf("0\n"); 37 continue; 38 } 39 if(p[a-1][b-1][c-1] == 1) 40 { 41 printf("-1\n"); 42 continue; 43 } 44 while(start <= end) 45 { 46 j = 1; 47 if(num > time) 48 break; 49 for(i = start;i <= end;i ++) 50 { 51 for(k = 0;k <= 5;k ++) 52 { 53 if(qua[i]+x[k]>=0&&qua[i]+x[k]<=a-1&&qub[i]+y[k]>=0&&qub[i]+y[k]<=b-1&&quc[i]+z[k]>=0&&quc[i]+z[k]<=c-1) 54 { 55 if(!o[qua[i]+x[k]][qub[i]+y[k]][quc[i]+z[k]]) 56 { 57 o[qua[i]+x[k]][qub[i]+y[k]][quc[i]+z[k]] = 1; 58 qua[end + j] = qua[i]+x[k]; 59 qub[end + j] = qub[i]+y[k]; 60 quc[end + j] = quc[i]+z[k]; 61 j ++; 62 } 63 } 64 } 65 } 66 start = end + 1; 67 end = end + j - 1; 68 num ++; 69 if(o[a-1][b-1][c-1]) 70 { 71 zz = 1; 72 break; 73 } 74 } 75 if(zz) 76 printf("%d\n",num); 77 else 78 printf("-1\n"); 79 } 80 return 0; 81 }