hdu 1253 승리 대도 망 (간단 한 문제)

10686 단어 HDU
제목 링크: http://acm.hdu.edu.cn/showproblem.php?pid=1253
제목: 주어진 시간 에 성 을 무사히 떠 날 수 있다.
 
 1 #include <iostream>

 2 #include <cstdio>

 3 #include <queue>

 4 #include <cstring>

 5 using namespace std;  6 int map[55][55][55],visit[55][55][55],a,b,c,T;  7 int dir[6][3]= {0,0,1,0,0,-1,0,1,0,0,-1,0,1,0,0,-1,0,0};  8 struct next  9 { 10     int x; 11     int y; 12     int z; 13     int t; 14 } s,ss; 15 queue<next>q,qq; 16 int bfs() 17 { 18     s.x=0; 19     s.y=0; 20     s.z=0; 21     s.t=0; 22     map[0][0][0]=1; 23  q.push(s); 24     while (!q.empty()) 25  { 26         s=q.front(); 27  q.pop(); 28         for (int i=0; i<6; i++) 29  { 30             int t=s.t+1; 31             int x=s.x+dir[i][0],y=s.y+dir[i][1],z=s.z+dir[i][2]; 32             if (x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&t<=T&&map[x][y][z]==0&&!visit[x][y][z]) 33  { 34                 if(x==a-1&&y==b-1&&z==c-1) 35  { 36                     return t; 37  } 38                 ss.x=x; 39                 ss.y=y; 40                 ss.z=z; 41                 ss.t=t; 42                 visit[x][y][z]=1; 43  q.push(ss); 44 

45  } 46  } 47  } 48     return -1; 49 } 50 int main () 51 { 52     int o,i,j,k; 53     scanf ("%d",&o); 54     while (o--) 55  { 56         memset(visit,0,sizeof(visit)); 57         q=qq; 58         scanf ("%d%d%d%d",&a,&b,&c,&T); 59         for (i=0; i<a; i++) 60             for (j=0; j<b; j++) 61                 for (k=0; k<c; k++) 62                     scanf ("%d",&map[i][j][k]); 63         int t=bfs(); 64         if (t>=0) 65             printf ("%d
",t); 66 else 67 printf ("-1
"); 68 } 69 return 0; 70 }

 
 

좋은 웹페이지 즐겨찾기