为什么这个代码会超过1000MS呢?急求。谢谢! 题目:http://poj.grids.cn/practice/372

#include"stdio.h"#include"iostream"usingnamespacestd;inti,j,m,n;intax,ay,bx,by;chart,... #include"stdio.h"
#include"iostream"
using namespace std;

int i,j,m,n;
int ax,ay,bx,by;
char t,path[21][21];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int queue[400][3];
int left1,right1;

int inarea(int x,int y) {
return(x>=0&&x<n&&y>=0&&y<m);
}

int bfs() {
int tx,ty;
left1=right1=0;
queue[0][0]=ax;
queue[0][1]=ay;
queue[0][2]=0;
path[ay][ax]='#';
right1++;

while(left1<right1) {
if(queue[left1][0]==bx&&queue[left1][1]==by)
return queue[left1][2];
for(int k=0;k<4;++k) {
tx=queue[left1][0]+dx[k];
ty=queue[left1][1]+dy[k];
if(inarea(tx,ty)&&path[ty][tx]!='#') {
queue[right1][0]=tx;
queue[right1][1]=ty;
queue[right1++][2]=queue[left1][2]+1;
path[ty][tx]='#';
}
}
++left1;
}
return -1;
}
int main() {
while(scanf("%d%d",&m,&n),m!=0&&n!=0) {
getchar();
for(i=0;i<m;i++) {
for(j=0;j<n;j++) {
t=getchar();
if(t=='@') {
ax=j;
ay=i;
}
if(t=='*') {
bx=j;
by=i;
}
path[i][j]=t;
}
getchar();
}
printf("%d\n",bfs());
}
}
展开
 我来答
logiciel
2011-02-22 · TA获得超过140个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:367万
展开全部
你的解法与http://hi.baidu.com/yjy2410578/blog/item/dafc1bfa6cb359d6b58f31b2.html相似。但后者在处理输入时还判断是否有'*',如果没有就立即输出-1。
suiyue_2009
2011-02-21 · TA获得超过846个赞
知道小有建树答主
回答量:1248
采纳率:0%
帮助的人:873万
展开全部
for循环太多了,这会浪费掉很多时间
追问
可是FOR循环是按嵌套层数来算时间的啊。而且广搜做标记了。会快啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式