Catch That Cow

经过+1,-1,*2的操作,使第一个数等于第二个数

求最少步骤都是用的广搜

#include<stdio.h>

#include<queue>

#include<string.h>

using namespace std;

const int MAXN=100010;



int step[MAXN],vis[MAXN];

queue<int>Q;



int BFS(int n,int k)

{

    int next,head;

    step[n]=0; 

    vis[n]=1;

    Q.push(n);

    while(!Q.empty())

    {

        head=Q.front();

        Q.pop();

        for(int i=0;i<3;i++)

        {

            if(i==0) next=head-1;

            else if(i==1) next=head+1;

            else next=head*2;

            if(next>MAXN || next<0) continue;

            if(!vis[next]) 

            {

                vis[next]=1;

                Q.push(next);

                step[next]=step[head]+1;

            }

            if(k==next) return step[next];

        //广搜搜索的深度第一次相等的就是深度最小的那个支结点,所以没必要再比较哪个最少了

        }

    

    }

}



int main()

{

    int n,k;

    while(scanf("%d%d",&n,&k)!=EOF)

    {

        memset(vis,0,sizeof(vis));

        if(n>=k) printf("%d\n",n-k);

        else printf("%d\n",BFS(n,k));

    }

    return 0;

}

你可能感兴趣的:(catch)