zoukankan      html  css  js  c++  java
  • noi 抓住那头牛

    抓住那头牛

    描述

    农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

    1、从X移动到X-1或X+1,每次移动花费一分钟
    2、从X移动到2*X,每次移动花费一分钟
     
    假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
    输入
    两个整数,N和K
    输出
    一个整数,农夫抓到牛所要花费的最小分钟数
    样例输入
    5 17
    样例输出
    4
    解析
      农夫每次走有三种情况,用宽搜解决问题,不过要注意数据范围,超出范围的点不能走;
    #include<cstdio> 
    #include<queue>
    using namespace std;
    int ans[100002]={0};
    bool f[100002]={0};
    int n,k;
    queue<int> q;
    void bfs(int x){
        ans[x]=0;
        f[x]=1;
        q.push(x);
        while(!q.empty()){
            int z=q.front();
            q.pop();
            if(!f[z+1]&&z+1<=100000){
                f[z+1]=1;
                q.push(z+1);
                ans[z+1]=ans[z]+1;
            }
            if(!f[z-1]&&z-1>=0){
                f[z-1]=1;
                q.push(z-1);
                ans[z-1]=ans[z]+1;
            }
            if(!f[z*2]&&z*2<=100000){
                f[z*2]=1;
                q.push(z*2);
                ans[z*2]=ans[z]+1;
            }
            if(ans[k]){
                printf("%d",ans[k]);
                return;
            }
        }
    }
    int main(){
        scanf("%d%d",&n,&k);
        if(n==k){
            printf("0
    ");
            return 0;
        }
        bfs(n);
        return 0;
    }
    View Code
  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/qingang/p/5762511.html
Copyright © 2011-2022 走看看