HDU 1240 Asteroids!
三维的BFS,很裸的题,不过一定要注意这一题给的坐标x表示列,y表示行,z表示层,实际输入的时候调试一下看看给的坐标是不是跟样例在图中所指的对象一样就行了。
AC code:
View Code
1 #include <iostream>
2 #define MAX 10000
3 using namespace std;
4 struct node{
5 int j, i, k, step;
6 }que[MAX];
7 char s[10];
8 int n;
9 int sj, si, sk;
10 int ej, ei, ek;
11 char map[11][11][11];
12 int dir[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}};
13 int ok;
14
15 bool inmap(int j ,int i, int k)
16 {
17 return j >= 0 && j < n && i >= 0 && i <n && k >= 0 && k < n;
18 }
19 int bfs()
20 {
21 int front = 0, rear = 1;
22 int ti, tj, tk;
23 que[0].i = si;que[0].j = sj;que[0].k = sk;que[0].step = 0;
24 map[si][sj][sk] = 'X';
25 while(front < rear)
26 {
27 if(que[front].i == ei && que[front].j == ej && que[front].k == ek){
28 printf("%d %d\n",n, que[front].step);
29 return 1;
30 break;
31 }
32 for(int d = 0; d < 6; d++)
33 {
34 ti = que[front].i + dir[d][1];
35 tj = que[front].j + dir[d][0];
36 tk = que[front].k + dir[d][2];
37 if(inmap(ti, tj, tk) && map[ti][tj][tk] == 'O')
38 {
39 map[ti][tj][tk] = 'X';
40 que[rear].j = tj; que[rear].i = ti; que[rear].k = tk;
41 que[rear++].step = que[front].step + 1;
42 }
43 }
44 front++;
45 }
46 return 0;
47 }
48 int main()
49 {
50 while(scanf("%s%d", s, &n) != EOF)
51 {
52 int i, j, k;
53 ok = 0;
54 memset(map, 0, sizeof(map));
55 for(i = 0; i < n; i ++)
56 for(j = 0; j < n; j++)
57 for(k = 0; k < n; k++)
58 {
59 cin >>map[j][k][i];
60 }
61 scanf("%d%d%d%d%d%d", &si, &sj, &sk, &ei, &ej, &ek);
62 scanf("%s", s);
63 ok = bfs();
64 if(!ok)
65 printf("NO ROUTE\n");
66 }
67 return 0;
68 }
