一道ACM题目,在VC上各种输入都能得到正确答案,提交时总是Wa,求破 20
题目链接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=940我的程序#include<iostre...
题目链接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=940
我的程序
#include<iostream>
#include<queue>
using namespace std;
int bfs(int l1,int r1,int c1,int l2,int r2,int c2,int l,int r,int c,int maze[50][50][50])
{
int a,b,p;
queue<int> qu;
int mark[50][50][50];
for(int w=0;w<l;w++)
for(int v=0;v<r;v++)
for(int u=0;u<c;u++)
mark[w][v][u]=maze[w][v][u];
qu.push(l1);
qu.push(r1);
qu.push(c1);
while(!qu.empty())
{
a=qu.front();qu.pop();
b=qu.front();qu.pop();
p=qu.front();qu.pop();
if(a==l2&&b==r2&&p==c2)
{
break;
}
if(a+1<l&&mark[a+1][b][p]==1)
{
qu.push(a+1);
qu.push(b);
qu.push(p);
maze[a+1][b][p]=maze[a][b][p]+1;
mark[a+1][b][p]=0;
}
if(a-1>=0&&mark[a-1][b][p]==1)
{
qu.push(a-1);
qu.push(b);
qu.push(p);
maze[a-1][b][p]=maze[a][b][p]+1;
mark[a-1][b][p]=0;
}
if(b+1<r&&mark[a][b+1][p]==1)
{
qu.push(a);
qu.push(b+1);
qu.push(p);
maze[a][b+1][p]=maze[a][b][p]+1;
mark[a][b+1][p]=0;
}
if(b-1>=0&&mark[a][b-1][p]==1)
{
qu.push(a);
qu.push(b-1);
qu.push(p);
maze[a][b-1][p]=maze[a][b][p]+1;
mark[a][b-1][p]=0;
}
if(p+1<c&&mark[a][b][p+1]==1)
{
qu.push(a);
qu.push(b);
qu.push(p+1);
maze[a][b][p+1]=maze[a][b][p]+1;
mark[a][b][p+1]=0;
}
if(p-1>=0&&mark[a][b][p-1]==1)
{
qu.push(a);
qu.push(b);
qu.push(p-1);
maze[a][b][p-1]=maze[a][b][p]+1;
mark[a][b][p-1]=0;
}
}
return maze[l2][r2][c2]-1;
}
int main()
{
int l,r,c;
while(cin>>l>>r>>c)
{
if((l==0)&&(r==0)&&(c==0))
break;
char car[30];
cin.getline(car,30);
int l1,l2,r1,r2,c1,c2;
int maze[50][50][50];
int i,j,q;
for(i=0;i<l;i++)
{
j=0;
while(cin.getline(car,30)&&(j<r))
{
for(q=0;q<c;q++)
{
if(car[q]=='#')
maze[i][j][q]=0;
else
maze[i][j][q]=1;
if(car[q]=='S')
{
l1=i;r1=j;c1=q;
}
if(car[q]=='E')
{
l2=i;r2=j;c2=q;
}
}
j++;
}
}
int k=bfs(l1,r1,c1,l2,r2,c2,l,r,c,maze);
if(k==0)
cout<<"Trapped!"<<endl;
else
cout<<"Escaped in "<<k<<" minute(s)."<<endl;
}
return 0;
} 展开
我的程序
#include<iostream>
#include<queue>
using namespace std;
int bfs(int l1,int r1,int c1,int l2,int r2,int c2,int l,int r,int c,int maze[50][50][50])
{
int a,b,p;
queue<int> qu;
int mark[50][50][50];
for(int w=0;w<l;w++)
for(int v=0;v<r;v++)
for(int u=0;u<c;u++)
mark[w][v][u]=maze[w][v][u];
qu.push(l1);
qu.push(r1);
qu.push(c1);
while(!qu.empty())
{
a=qu.front();qu.pop();
b=qu.front();qu.pop();
p=qu.front();qu.pop();
if(a==l2&&b==r2&&p==c2)
{
break;
}
if(a+1<l&&mark[a+1][b][p]==1)
{
qu.push(a+1);
qu.push(b);
qu.push(p);
maze[a+1][b][p]=maze[a][b][p]+1;
mark[a+1][b][p]=0;
}
if(a-1>=0&&mark[a-1][b][p]==1)
{
qu.push(a-1);
qu.push(b);
qu.push(p);
maze[a-1][b][p]=maze[a][b][p]+1;
mark[a-1][b][p]=0;
}
if(b+1<r&&mark[a][b+1][p]==1)
{
qu.push(a);
qu.push(b+1);
qu.push(p);
maze[a][b+1][p]=maze[a][b][p]+1;
mark[a][b+1][p]=0;
}
if(b-1>=0&&mark[a][b-1][p]==1)
{
qu.push(a);
qu.push(b-1);
qu.push(p);
maze[a][b-1][p]=maze[a][b][p]+1;
mark[a][b-1][p]=0;
}
if(p+1<c&&mark[a][b][p+1]==1)
{
qu.push(a);
qu.push(b);
qu.push(p+1);
maze[a][b][p+1]=maze[a][b][p]+1;
mark[a][b][p+1]=0;
}
if(p-1>=0&&mark[a][b][p-1]==1)
{
qu.push(a);
qu.push(b);
qu.push(p-1);
maze[a][b][p-1]=maze[a][b][p]+1;
mark[a][b][p-1]=0;
}
}
return maze[l2][r2][c2]-1;
}
int main()
{
int l,r,c;
while(cin>>l>>r>>c)
{
if((l==0)&&(r==0)&&(c==0))
break;
char car[30];
cin.getline(car,30);
int l1,l2,r1,r2,c1,c2;
int maze[50][50][50];
int i,j,q;
for(i=0;i<l;i++)
{
j=0;
while(cin.getline(car,30)&&(j<r))
{
for(q=0;q<c;q++)
{
if(car[q]=='#')
maze[i][j][q]=0;
else
maze[i][j][q]=1;
if(car[q]=='S')
{
l1=i;r1=j;c1=q;
}
if(car[q]=='E')
{
l2=i;r2=j;c2=q;
}
}
j++;
}
}
int k=bfs(l1,r1,c1,l2,r2,c2,l,r,c,maze);
if(k==0)
cout<<"Trapped!"<<endl;
else
cout<<"Escaped in "<<k<<" minute(s)."<<endl;
}
return 0;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询