在搜索进行宽搜到指定点时,如果记录步数,是第一次将指定点弹出队列记录的步数最少,还是第一次访问到的步数最少。
感觉应该是一样的,但是这个代码:
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 ; }②
}
}
}
注释①是第一次将指定点弹出队列记录的步数
注释②是第一次访问到的步数。
按照注释②提交一直错误,有大佬知道是什么原因吗?