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

    题目链接http://noi.openjudge.cn/ch0205/2971/

    描述

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

    1、从X移动到X-1或X+1,每次移动花费一分钟
    2、从X移动到2*X,每次移动花费一分钟
     
    假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
    输入
    两个整数,N和K
    输出
    一个整数,农夫抓到牛所要花费的最小分钟数
    样例输入
    5 17
    样例输出
    4

    查看

    我用DFS无论怎么优化都超时,用BFS轻松就过了。这题比较适合用BFS,而且实现也比较容易。跟dfs一样,这里不需要显示的建图,每个状态看成一个节点,状态的转移看成边,状态的转移有三种方法,所以每个节点只有三条边,是确定的。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<vector>
    #include<queue>
    #define DEBUG(x) cout<<#x<<" = "<<x<<endl
    const int MAXN=1e5+10;
    using namespace std;
    struct Node{
        int pos;///农夫的位置
        int steps;
        Node(){}
        Node(int xx,int s):pos(xx),steps(s){}
    };
    queue<Node>q;
    int visited[MAXN];
    int main()
    {
    //    freopen("in.txt","r",stdin);
        int N,K;
        cin>>N>>K;
        memset(visited,0,sizeof(visited));
        q.push(Node(N,0));
        visited[N]=true;
        while(!q.empty()){
            Node t=q.front();
            q.pop();
            if(t.pos==K){
                cout<<t.steps<<endl;
                return 0;
            }
            if(t.pos-1>=0&&!visited[t.pos-1]){
                q.push(Node(t.pos-1,t.steps+1));
                visited[t.pos-1]=true;
            }
            if(t.pos+1<=MAXN&&!visited[t.pos+1]){
                q.push(Node(t.pos+1,t.steps+1));
                visited[t.pos+1]=true;
            }
            if(t.pos*2<=MAXN&&!visited[t.pos*2]){
                q.push(Node(t.pos*2,t.steps+1));
                visited[t.pos*2]=true;
            }
        }
    }
  • 相关阅读:
    大道至简阅读笔记03
    团队项目二阶段-个人总结07
    团队项目二阶段-个人总结06
    团队项目二阶段-个人总结05
    学习进度条06
    领扣(LeetCode)单调数列 个人题解
    领扣(LeetCode)数字转换为十六进制数 个人题解
    领扣(LeetCode)字符串相加 个人题解
    领扣(LeetCode)删除链表中的节点 个人题解
    领扣(LeetCode)有效的括号 个人题解
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/9268462.html
Copyright © 2011-2022 走看看