zoukankan      html  css  js  c++  java
  • poj 3278 Catch That Cow(BFS)

    *题意:

         相当于在一个数轴上给定农夫的位置n与牛的位置k。假定牛不懂,农夫每次有三种移动方式:n+1.n-1.n*2。问农夫最少移动几步后才能到牛的位置。
    *思路:
         用bfs寻找最短路径。
    *代码:
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    int queue[100001];
    bool visit[100001];
    int step[100001];
    using namespace std;
    void bfs(int n,int k)
    {
        memset(visit,0,sizeof(visit));
        memset(step,0,sizeof(step));
        int i,next,temp,flag=0;
        int front=0,back=1;
        visit[n]=1,queue[0]=n;
        step[n]=0;
        while(front<back)
        {
            temp=queue[front++];
            for(i=0;i<3;i++)
            {
                if(i==0)next=temp+1;
                else if(i==1)next=temp-1;
                else next=temp*2;
                if(next<=100000&&next>=0&&!visit[next])//保证数组不越界,注意判断顺序,若!visit[next]在前会越界。
                {
                    visit[next]=1;
                    queue[back++]=next;
                    step[next]=step[temp]+1;
                }
                if(next==k)
                {
                    flag=1;
                    break;
                }
            }
            if(flag)
                break;
    
        }
        cout<<step[k]<<endl;
    }
    int main()
    {
        int n,k;
        cin>>n>>k;
        if(n>=k)
            cout<<n-k<<endl;
        else
            bfs(n,k);
        return 0;
    }
    
    注:1、这道题是第一次看bfs,看过之后感觉虽然题很简单但是对理解bfs的运行过程还是比较有帮助的。
        2、做这道提示注意不要让数组越界,所以有判断语句并且要注意次序(就是因为这个re了好多次)。

      

  • 相关阅读:
    203. Remove Linked List Elements
    python练习小程序
    五十音练习小软件
    CocosCreator生命游戏
    一个swift下载程序
    用excel做一幅像素画
    翻译一篇SpiderMonkey GC的文章
    unity-3d拼图游戏
    NDK编译Python2.7.5
    git命令简图
  • 原文地址:https://www.cnblogs.com/Neptunes/p/3278386.html
Copyright © 2011-2022 走看看