抓住那头牛——BFS

农夫知道一头牛的位置,想要抓住它。
农夫和牛都位于数轴上,农夫起始位于点 N,牛位于点 K。
农夫有两种移动方式:从 X 移动到 X−1 或 X+1,每次移动花费一分钟从 X 移动到 2∗X,每次移动花费一分钟。
假设牛没有意识到农夫的行动,站在原地不动。
农夫最少要花多少时间才能抓住牛?

输入格式
共一行,包含两个整数N和K。

输出格式
输出一个整数,表示抓到牛所花费的最少时间。

数据范围
0≤N,K≤105

#include 
using namespace std;
#define int long long 
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair PII;
const int N=2e6+10;
int d[N];
bool vis[N];
int n,k;
queue  q;
int bfs(int n)
{
    vis[n]=1;
    q.push(n);
    while (q.size()&&!vis[k])
    {
        int x=q.front();
        q.pop();
        if (!vis[x-1]&&x-1>=0)
        {
            d[x-1]=d[x]+1;
            q.push(x-1);
            vis[x-1]=1;
        }
        if (!vis[x+1]&&x+1<=2e5) 
        {
            d[x+1]=d[x]+1;
            q.push(x+1);
            vis[x+1]=1;
        }
        if (!vis[2*x]&&2*x<=2e5)
        {
            d[2*x]=d[x]+1;
            q.push(2*x);
            vis[2*x]=1;
        }
    }
    return d[k];
}
signed main()
{
    ios;
    cin>>n>>k;
    cout<

你可能感兴趣的:(宽度优先,算法)