这个题目我真是不想说什么了,看了一个中午看懂的题目,然后写了一个中午错误,换种方法还是错误,真的是要被气死了,先放在这里有空来改。。。。。
注意啊这是错误程序
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <queue>
#include <cstring>
using namespace std;
const int maxn=12;
char str[maxn][maxn][maxn];
int sc,sr,sz,ec,er,ez;
int n;
int X[]={0,0,1,-1,0,0};
int Y[]={1,-1,0,0,0,0};
int Z[]={0,0,0,0,1,-1};
int vis[maxn][maxn][maxn];
const int INF=1e9;
int BFS()
{
typedef pair<int ,int> p;
typedef pair<p,int> pp;
queue<pp> q;
// q.clear();
q.push(pp(p(sz,sr),sc));
vis[sz][sr][sc]=0;
while(q.size())
{
pp p1=q.front();
q.pop();
if(p1.first.first==ez&&p1.first.second==er&&p1.second==ec) break;
for(int i=0;i<6;i++)
{
int mz=p1.first.first+Z[i];
int mx=p1.first.second+X[i];
int mc=p1.second+Y[i];
if(mz>=0&&mz<n&&mx>=0&&mx<n&&mc>=0&&mc<n&&str[mz][mx][mc]!='X'&&vis[mz][mx][mc]==INF)
{
q.push(pp(p(mz,mx),mc));
vis[mz][mx][mc]=vis[p1.first.first][p1.first.second][p1.second]+1;
}
}
}
return vis[ez][er][ec];
}
int main()
{
string s;
while(cin>>s>>n)
{
memset(str,0,sizeof(str));
memset(vis,0,sizeof(vis));
getchar();
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
scanf("%c",&str[k][j][i]);
vis[i][j][k]=INF;
}
getchar();
}
}
scanf("%d%d%d",&sc,&sr,&sz);
scanf("%d%d%d",&ec,&er,&ez);
vis[sz][sr][sc]=0;
string ss;
cin>>ss;
if(vis[ez][er][ec]!=INF)
{
printf("%d %d\n",n,vis[ez][er][ec]);
}
else
printf("NO ROUTE\n");
}
return 0;
}
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <queue>
#include <cstring>
#include <string>
using namespace std;
const int maxn=13;
char str[maxn][maxn][maxn];
int vis[maxn][maxn][maxn];
int n;
int sx,sy,sz,ex,ey,ez;
int X[]={0,0,1,-1,0,0};
int Y[]={1,-1,0,0,0,0};
int Z[]={0,0,0,0,1,-1};
struct Point
{
int x,y,z;
int num;
Point ()
{
int x=0,y=0,z=0;
int num=0;
}
};
const int INF=1e8;
int BFS()
{
queue<Point> q;
Point p;
p.x=sx,p.y=sy,p.z=sz;
p.num=0;
q.push(p);
while(q.size())
{
Point pp=q.front();
q.pop();
if(pp.x==ex&&pp.y==ey&&pp.z==ez) return pp.num;
for(int i=0;i<6;i++)
{
int mx=pp.x+X[i];
int mz=pp.y+Y[i];
int my=pp.z+Z[i];
if(mx>=0&&mx<n&&mz>=0&&mz<n&&my>=0&&my<n&&vis[mx][my][mz]==INF&&str[mx][my][mz]!='X')
{
Point pq;
pq.x=mx,pq.y=my,pq.z=mz;
pq.num=pp.num+1;
vis[mx][my][mz]=pp.num+1;
}
}
}
return -1;
}
int main()
{
string ss;
while(cin>>ss>>n)
{
memset(str,0,sizeof(str));
memset(vis,0,sizeof(vis));
getchar();
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
scanf("%c",&str[k][j][i]);
vis[k][j][i]=INF;
}
getchar();
}
}
cin>>sy>>sx>>sz;
cin>>ey>>ex>>ez;
vis[sy][sx][sz]=0;
string s;
cin>>s;
int temp=BFS();
if(temp!=-1)
printf("%d %d\n",n,temp);
else
printf("NO ROUTE\n");
}
return 0;
}