啊 崩溃。 一看是三维广搜,觉得挺简单的,就做了。 一直WA,去看poj讨论,发现人家说,输入的是列,行,层。。。悲剧了。。。输入错了 = =。。。 都是不好好看题啊不好好看题。。。无语。。。 #include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <algorithm> #define MAX 12 using namespace std; typedef struct MAP{ int x,y,z; int t; }MAP; char map[MAX][MAX][MAX]; int n,endx,endy,endz; int used[MAX][MAX][MAX]; int dir[18] = {0,0,1, 0,0,-1, 1,0,0, -1,0,0, 0,-1,0, 0,1,0}; queue<MAP> q; int check(int x) { if( x >= 0 && x < n ) return 1; return 0; } int BFS() { int i,t,x,y,z,a,b,c; while( !q.empty() ) { MAP tmp = q.front(); q.pop(); t = tmp.t; x = tmp.x; y = tmp.y; z = tmp.z; for(i=0; i<18; i+=3) { a = x+dir[i]; b = y+dir[i+1]; c = z+dir[i+2]; if( a == endx && b == endy && c == endz ) return t+1; if( map[a][b][c] == 'O' && check(a) && check(b) && check(c) && used[a][b][c] > t+1 ) { used[a][b][c] = t+1; tmp.x = a; tmp.y = b; tmp.z = c; tmp.t = t+1; q.push(tmp); } } } return -1; } int main() { char str[20]; int i,j,k,ans; while( ~scanf("%s",str) ) { while( !q.empty() ) q.pop(); scanf("%d",&n); for(i=0; i<n; i++) for(j=0; j<n; j++) for(k=0; k<n; k++) used[i][j][k] = INT_MAX; getchar(); for(i=0; i<n; i++) // 这个这个 = = 。。。 for(k=0; k<n; k++) { for(j=0; j<n; j++) scanf("%c",&map[j][k][i]); getchar(); } MAP tmp; scanf("%d%d%d",&tmp.x,&tmp.y,&tmp.z); tmp.t = 0; q.push(tmp); used[tmp.x][tmp.y][tmp.z] = 0; scanf("%d%d%d",&endx,&endy,&endz); scanf("%s",str); if( endx == tmp.x && endy == tmp.y && endz == tmp.z ) { printf("%d %d/n",n,0); continue; } ans = BFS(); if( ans != -1 ) printf("%d %d/n",n,ans); else printf("NO ROUTE/n"); } return 0; }