这道题非常简单,一边看中国好声音一边做一小时AC,没啥要注意的地方,把数组开大一点就不会WA了
BFS
直接代码:
#include<iostream>
using namespace std;
int que[1000000];
bool visit[100010];
int main(){
int n,k;
cin>>n>>k;
int front=0;
int rear=0;
que[rear++]=n;
int count=0;
memset(visit,0,sizeof(visit));
visit[n]=1;
while(front<rear){
int end = rear;
count++;
while (front<end){
int tmp = que[front++];
if (tmp==k) {
cout<<count-1<<endl;
break;
}
int a=tmp-1;
int b=tmp+1;
int c=2*tmp;
if (a>=0){
if (visit[a]==0){
que[rear++]=a;
visit[a]=1;
}
}
if (c<=100000){
if (visit[c]==0){
que[rear++]=c;
visit[c]=1;
}
}
if (b<=100000){
if(visit[b]==0){
que[rear++]=b;
visit[b]=1;
}
}
}
}
return 0;
}
欢迎留言交流~