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 |
Re:疑问a 我的代码在杭电一次就AC啦,为什么在这里交这么多都过不了啊!!!In Reply To:疑问a 我的代码在杭电一次就AC啦,为什么在这里交这么多都过不了啊!!! Posted by:Xiao_Dragon at 2009-08-28 19:09:03 > 附代码: > /* > 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