• 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;
    }
  • 相关阅读:
    孙权劝学
    劝学
    为学
    字符串的全排列
    剑指offer面试题3二维数组中的查找
    如何正确安装软件
    写给自己的话
    Linux常用命令
    第三届华为杯
    D^3ctf两道 pwn
  • 原文地址:https://www.cnblogs.com/zsboy/p/2593709.html
Copyright © 2020-2023  润新知