版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/40649851

广搜简单题

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stack>
#include <queue>

using namespace std;

int n,m;
int vis[100010];

int main ()
{
    while (scanf("%d%d",&n,&m)!=EOF)
    {
        for (int i =0 ;i<=100003;i++)
            vis[i]=0;

        queue<int> q ;

        q.push(n);
        vis[n]=1;

        int p;

        while (!q.empty())
        {
            p=q.front();
            q.pop();

            if (p == m )
                break;
            else
            {
                int ans1 = p-1;
                int ans2 = p+1;
                int ans3 = p*2;
                if (ans1 >=0 && ans1 <= 100000 && !vis[ans1])
                {
                    vis[ans1]=vis[p]+1;
                    q.push(ans1);
                }
                if (ans2 >=0 && ans2 <= 100000 && !vis[ans2])
                {
                    vis[ans2]=vis[p]+1;
                    q.push(ans2);
                }
                if (ans3 >=0 && ans3 <= 100000 && !vis[ans3])
                {
                    vis[ans3]=vis[p]+1;
                    q.push(ans3);
                }
            }
        }
        printf("%d\n",vis[m]-1);
    }
}