题目链接:https://vjudge.net/contest/65959#problem/C
注意点:
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
queue<int>q;
q.push(n);
int num[100005];
int visited[100005];
memset(num,0,sizeof(num));
memset(visited,0,sizeof(visited));
visited[n]=1;//注意将起始点标记
// int dis[100005];
while(!q.empty())
{
int temp=q.front();
q.pop();
if(temp==m)
{
cout<<num[m]<<endl;
break;
}
if(temp-1>=0&&visited[temp-1]==0)
{
visited[temp-1]=1;
num[temp-1]=num[temp]+1;
q.push(temp-1);
}//判断边界时注意 0
if(temp+1<=100000&&visited[temp+1]==0)
{
visited[temp+1]=1;
num[temp+1]=num[temp]+1;
q.push(temp+1);
}//有可能会跳出第二个点,所以判断条件应该是《=100000,而不是《m
if(temp*2<=100000&&visited[temp*2]==0)
{
visited[temp*2]=1;
num[temp*2]=num[temp]+1;
q.push(temp*2);
}
}
// cout<<num[m]<<endl;
return 0;
}