首页 新闻 会员 周边

宽搜过程中存在的记录步数的问题。

0
悬赏园豆:50 [待解决问题]

在搜索进行宽搜到指定点时,如果记录步数,是第一次将指定点弹出队列记录的步数最少,还是第一次访问到的步数最少。
感觉应该是一样的,但是这个代码:
​void bfs(){
while(!que.empty()) que.pop();
nond tmp;tmp.pos=x;tmp.step=0;
vis[x]=1;que.push(tmp);
while(!que.empty()){
nond now=que.front();
que.pop();nond a,b,c;
if(now.pos==y){ printf("%d\n",now.step);return ; }//①
c.pos=now.pos+1;c.step=now.step+1;
if(now.pos<=y&&!vis[c.pos]){
que.push(c),vis[c.pos]=1;
//if(c.pos==y){ printf("%d\n",c.step);return ; }②
}
a.pos=now.pos-1;a.step=now.step+1;
if(now.pos>=1&&!vis[a.pos]){
que.push(a),vis[a.pos]=1;
//if(a.pos==y){ printf("%d\n",a.step);return ; }②
}
b.pos=now.pos*2;b.step=now.step+1;
if(now.pos<=y&&!vis[b.pos]){
que.push(b),vis[b.pos]=1;
//if(b.pos==y){ printf("%d\n",b.step);return ; }②
}
}
}
注释①是第一次将指定点弹出队列记录的步数
注释②是第一次访问到的步数。

按照注释②提交一直错误,有大佬知道是什么原因吗?

一蓑烟雨任生平的主页 一蓑烟雨任生平 | 初学一级 | 园豆:56
提问于:2018-09-16 21:56
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册