题目链接:http://poj.org/problem?id=2225
这里要注意的是,输入的是坐标x,y,z,那么这个点就是在y行,x列,z层上。
我竟然WA在了结束搜索上了,写成了输出s.step.我要调疯了。
#include <stdio.h> #include <queue> #include <string.h> using namespace std; struct Point { int x,y,z; int step; } points[1005]; char maps[15][15][15]; bool vis[15][15][15]; ///上下前后左右 int to[6][3]= {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,-1},{0,0,1}}; int main() { char str[20]; while(scanf("%s",str)!=EOF) { memset(vis,false,sizeof(vis)); int n; scanf("%d",&n); for(int i=0; i<n; i++) for(int j=0; j<n; j++) scanf("%s",maps[i][j]); int x1,y1,z1; ///x 行,y列,z层 int x2,y2,z2; scanf("%d%d%d%d%d%d",&y1,&x1,&z1,&y2,&x2,&z2); char tmp[20]; scanf("%s",tmp); queue<Point> Q; Point s,next; s.x = x1; s.y = y1; s.z = z1; s.step = 0; Q.push(s); vis[s.z][s.x][s.y] = true; int ans = 0; bool flag = false; while(!Q.empty()) { Point f; f = Q.front(); Q.pop(); if(f.x==x2&&f.y==y2&&f.z==z2) { flag = true; ans = f.step; break; } for(int i=0; i<6; i++) { next.x = f.x + to[i][1]; next.y = f.y + to[i][2]; next.z = f.z + to[i][0]; if(next.x<0||next.x>=n||next.y<0||next.y>=n||next.z<0||next.z>=n) continue; if(vis[next.z][next.x][next.y]||maps[next.z][next.x][next.y]=='X') continue; next.step = f.step + 1; //printf("%d %d %d ",next.x,next.y,next.z); //printf("%d ",next.step); vis[next.z][next.x][next.y] = true; Q.push(next); } } if(flag) printf("%d %d ",n,ans); else printf("NO ROUTE "); } return 0; }