一开始输入的时候是三维数组就懵逼了...只要把输入写好,子函数是简单的bfs。
#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
struct p{
int x,y,z;
}now,nex;
int n,x1,y1,z1,x2,y2,z2;
char pla[15][15][15];//地图
char huan[105][15];//无用数组,可以删除
int vis[15][15][15];//记录步数
int fangxiang[6][3]={{0,0,1},{0,1,0},{1,0,0},{-1,0,0},{0,-1,0},{0,0,-1}};
int dpla[15][15][15];
char laji[10];//随意定的数组,接收无用的数据(END..)
void bfs()
{
if(x2==x1&&y2==y1&&z1==z2)
{
printf("%d 0\n",n);
return;
}//起点终点相同,直接输出。
queue<p>q;
now.x=x1;
now.y=y1;
now.z=z1;
dpla[now.x][now.y][now.z]=0;
vis[now.x][now.y][now.z]=1;//防止走重复
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
for(int i=0;i<6;i++)
{
nex.x=now.x+fangxiang[i][0];
nex.y=now.y+fangxiang[i][1];
nex.z=now.z+fangxiang[i][2];
if(nex.x>=0&&nex.x<n&&nex.y>=0&&nex.y<n&&nex.z>=0&&nex.z<n&&pla[nex.x][nex.y][nex.z]=='O'&&!vis[nex.x][nex.y][nex.z])
{
dpla[nex.x][nex.y][nex.z]=dpla[now.x][now.y][now.z]+1;
vis[nex.x][nex.y][nex.z]=1;
if(nex.x==x2&&nex.y==y2&&nex.z==z2)
{
printf("%d %d\n",n,dpla[nex.x][nex.y][nex.z]);
return ;
}
q.push(nex);
}
}
}
printf("NO ROUTE\n");
return ;
}
int main()
{
string s;
while(cin>>s)
{
cin>>n;
for(int z=0;z<n;z++)
for(int y=0;y<n;y++)
for(int x=0;x<n;x++)
cin>>pla[x][y][z];
cin>>x1>>y1>>z1>>x2>>y2>>z2;
cin>>s;//输入有点复杂,copy了网上的。
bfs();
}
return 0;
}