1A 0MS 注意坐标方向
#include <iostream> #include <queue> #include <string> #include <cstring> using namespace std; typedef struct { int x; int y; int z; int step; }point; int N; char map[11][11][11]; bool visited[11][11][11]; point begin,target; string start; string end; int minStep; int dirX[6] = {0,0,1,-1,0,0}; int dirY[6] = {0,0,0,0,1,-1}; int dirZ[6] = {1,-1,0,0,0,0}; bool BFS() { queue<point> Q; point p; p.x = begin.x; p.y = begin.y; p.z = begin.z; p.step = 0; visited[p.z][p.x][p.y] = 1; if(map[p.z][p.x][p.y] == 'X') return false; Q.push(p); while(!Q.empty()) { p = Q.front(); Q.pop(); if(p.x == target.x && p.y == target.y && p.z == target.z) { minStep = p.step; return true; } for(int i = 0; i < 6; i++) { point q; q.x = p.x + dirX[i]; q.y = p.y + dirY[i]; q.z = p.z + dirZ[i]; if(q.x < 0 || q.x >= N || q.y < 0 || q.y >= N || q.z < 0 || q.z >= N) continue; if(map[q.z][q.x][q.y] == 'O' && visited[q.z][q.x][q.y] == false) { visited[q.z][q.x][q.y] = true; q.step = p.step + 1; Q.push(q); } } } return false; } int main() { while(cin>>start>>N) { for(int z = 0; z < N; z++) { for(int x = 0; x < N; x++) { cin>>map[z][x]; /* for(int y = 0; z < N; z++) { cin>>map[z][x][y]; visited[z][x][y] = false; }*/ } } memset(visited,false,sizeof(visited)); cin>>begin.x>>begin.y>>begin.z; cin>>target.x>>target.y>>target.z; cin>>end; minStep = 32765; bool res = BFS(); if(res) { cout<<N<<" "<<minStep<<endl; } else { cout<<"NO ROUTE"<<endl; } } return 0; }