| ||||||||||
| 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呢?高手来看下呀如果去掉queue的头文件,自己写个队列就能过,为什么会这样?
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<queue.h>
bool way[31][31][31],visited[31][31][31];
int start_x,start_y,start_z,end_x,end_y,end_z;
/*class queue
{
private:
int a[100000];
int head,rear,size;
public:
queue(){
head=0,rear=0,size=0;
}
void push(int x){
a[rear]=x;
rear=(rear+1)%100000;
size++;
}
int front(){
return a[head];
}
int empty(){
return size==0;
}
void pop(){
head=(head+1)%100000;
size--;
}
};
*/
queue<int> q1_x,q1_y,q1_z,q2_x,q2_y,q2_z;
int bfs()
{
int n=0,i,x,y,z;
q1_x.push(start_x);
q1_y.push(start_y);
q1_z.push(start_z);
while(!q1_x.empty()){
while(!q1_x.empty()){
x=q1_x.front();
y=q1_y.front();
z=q1_z.front();
q1_x.pop();
q1_y.pop();
q1_z.pop();
if(x==end_x && y==end_y && z==end_z){
printf("Escaped in %d minute(s).\n",n);
return 1;
}
for(i=-1;i<=1;i++){
if(way[x][y+i][z] && visited[x][y+i][z]){
visited[x][y+i][z]=false;
q2_x.push(x);
q2_y.push(y+i);
q2_z.push(z);
}
if(way[x][y][z+i] && visited[x][y][z+i]){
visited[x][y][z+i]=false;
q2_x.push(x);
q2_y.push(y);
q2_z.push(z+i);
}
if(way[x+i][y][z] && visited[x+i][y][z]){
visited[x+i][y][z]=false;
q2_x.push(x+i);
q2_y.push(y);
q2_z.push(z);
}
}
}
while(!q2_x.empty()){
q1_x.push(q2_x.front());
q2_x.pop();
q1_y.push(q2_y.front());
q2_y.pop();
q1_z.push(q2_z.front());
q2_z.pop();
}
n++;
}
return 0;
}
int main()
{
int l,r,c,i,j,k;
char s;
while(scanf("%d %d %d",&l,&r,&c)!=EOF,l|r|c){
memset(way,false,sizeof(way));
memset(visited,true,sizeof(visited));
while(!q1_x.empty()){
q1_x.pop();
q1_y.pop();
q1_z.pop();
}
while(!q2_x.empty()){
q2_x.pop();
q2_y.pop();
q2_z.pop();
}
for(i=1;i<=l;i++){
for(j=1;j<=r;j++){
for(k=1;k<=c;k++){
scanf(" %c",&s);
if(s=='.')
way[i][j][k]=true;
else{
if(s=='S'){
start_x=i,start_y=j,start_z=k;
visited[i][j][k]=false;
}
if(s=='E'){
end_x=i,end_y=j,end_z=k;
way[i][j][k]=true;
}
}
}
}
}
if(!bfs()){
printf("Trapped!\n");
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator