hud 1240 Asteroids!.cpp
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
typedef long long LL;
//三维BFS
struct node{
int x,y,z;
int num;
};
int dis[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}};
int n;
int sx,sy,sz,ex,ey,ez;
int mp[12][12][12];
int step[12][12][12];
int tot=0;
void bfs(int z,int x,int y){
node a;
a.x=sx;a.y=sy;a.z=sz;
a.num=0;
step[sz][sx][sy]=0;
queue<node> q;
q.push(a);
while(!q.empty()){
node u=q.front();
q.pop();
//先判断
if(u.x==ex&&u.z==ez&&u.y==ey){
tot=u.num;
return;
}
for(int i=0;i<6;i++){
int xx=u.x+dis[i][0];
int yy=u.y+dis[i][1];
int zz=u.z+dis[i][2];
if(xx>=0&&xx<n&&yy>=0&&yy<n&&zz>=0&&zz<n&&mp[zz][xx][yy]!=INF){
if(step[zz][xx][yy]>step[u.z][u.x][u.y]+1){
step[zz][xx][yy]=step[u.z][u.x][u.y]+1;
mp[zz][xx][yy]=INF;
node next;
next.x=xx;next.y=yy;next.z=zz;
next.num=u.num+1;
q.push(next);
}
}
}
}
}
int main(){
char st[21],ed[21],op;
while(scanf("%s %d",st,&n)!=EOF){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int z=0;z<n;z++){
cin>>op;
if(op==‘X‘) mp[i][j][z]=INF;
if(op==‘0‘) mp[i][j][z]=1;
step[i][j][z]=INF;
}
}
}
cin>>sx>>sy>>sz>>ex>>ey>>ez;
cin>>ed;
tot=0;
bfs(sz,sx,sy);
if(step[ez][ex][ey]!=INF){
cout<<n<<" "<<tot<<endl;
}
else cout<<"NO ROUTE"<<endl;
}
return 0;
}
原文:https://www.cnblogs.com/shirlybaby/p/12390912.html