| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
疑问a 我的代码在杭电一次就AC啦,为什么在这里交这么多都过不了啊!!!附代码:
/*
Name: PKU_2225_Asteroid!_SS_F
Copyright: PRIVATE!!!
Author: LONGIXAOZHI
Date: 28-08-09 14:37
Description: 三维空间的迷宫问题 三维广搜
宇宙空间与许多的小行星,从一个空位置出发去一个地方,要求找到最短的路径,没有输出NO ROUT!
因为只可以走上下左右前后,因此,
方向坐标为step[6][3]= { {1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,1}};
记录路径的长度 dist[x][y][z]; 记录走到空间(x,y,z); dist[x][y][z]=0; 表示该点已经走过;
定义一个map[x][y][z]; 记录空间的状态,因为只有能走和不能走两个状态,因此可定义为一个bool数组;
bests 定义最短的距离;单位为1;
*/
#include<iostream>
#include<string>
#include<queue>
using namespace std;
const int maxn=10;
bool map[maxn][maxn][maxn];
int dist[maxn][maxn][maxn];
int step[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
struct Coor
{
int x,y,z;
}s,e;
int n,bests;
void BFS()
{
memset(dist,0,sizeof(dist));
dist[s.x][s.y][s.z]=0;
queue<int> Q;
Q.push(s.x); Q.push(s.y); Q.push(s.z);
Coor t1,t2;
while(!Q.empty())
{
t1.x=Q.front(); Q.pop();
t1.y=Q.front(); Q.pop();
t1.z=Q.front(); Q.pop();
if(t1.x == e.x && t1.y == e.y && t1.z == e.z)
{
if(dist[t1.x][t1.y][t1.z] < bests) bests=dist[t1.x][t1.y][t1.z];
}
for(int k=0; k<6; k++)
{
t2.x= t1.x + step[k][0];
t2.y= t1.y + step[k][1];
t2.z= t1.z + step[k][2];
if(t2.x >= n || t2.x < 0 || t2.y >= n || t2.y < 0 || t2.z >= n || t2.z < 0)
continue;
if(dist[t2.x][t2.y][t2.z] != 0 || map[t2.x][t2.y][t2.z] == 0 )
continue;
dist[t2.x][t2.y][t2.z]= dist[t1.x][t1.y][t1.z] + 1;
Q.push(t2.x); Q.push(t2.y); Q.push(t2.z);
}
}
}
int main()
{
char str[maxn]; int i,j,k;
while(scanf("%s%d",&str,&n)!=EOF)
{
for( k=0; k<n; k++)
{
for( i=0; i<n; i++)
{
scanf("%s",str);
for( j =0; j<n; j++)
{
if(str[j] == 'X')
map[i][j][k]= 0;
else
map[i][j][k]= 1;
}
}
}
scanf("%d%d%d",&s.x,&s.y,&s.z);
scanf("%d%d%d",&e.x,&e.y,&e.z);
scanf("%s",str);
bests=1001;
BFS();
if(bests == 1001)
cout<<"NO ROUTE"<<endl;
else
cout<<n<<" "<<bests<<endl;
}
return 0;
}
/*
Sample Input
START 1
O
0 0 0
0 0 0
END
START 3
OOO
OOO
OOO
XXX
XXX
XXO
OOO
OOO
OOO
0 0 0
0 0 2
END
START 3
OOO
OOO
OOO
XXX
XXO
XXX
OOO
OOO
OOO
0 0 0
0 0 2
END
START 3
XXX
XXX
XXX
OOO
OOO
OOO
XXX
XXX
XXX
0 0 1
2 2 1
END
START 5
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
XXXXX
XXOXX
XXXXX
XXXXX
XXXXX
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
0 0 0
4 4 4
END
Sample Output
1 0
3 10
NO ROUTE
3 4
NO ROUTE
Source
South Central USA 2001
*/
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator