HDOJ 2717 Catch That Cow

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2717

#include
#include
#include
using namespace std;
#define MAX 200100//因为输入的数n,k最大值为100000,
//但有一个2*k位置要存储,所以要将N设置到两倍最大值。
int farmer[MAX];/数组记录前进的步数
int x,y,sum;
queue q;//建立队列q
int search(int s)//从s开始去搜索y。
{
    int i;
    q.push(s);
    int hd;
    while(!q.empty())
    {
        hd=q.front();//取队头
        if(hd==y)
        {
            printf("%d\n",farmer[hd]);//如果==k,则输出数组在该位置的值
            while(!q.empty())//并且销毁队列
                q.pop();
            break;
        }
        farmer[hd]++;//如果!=y,让该位置的数组自增一
        q.pop();//搜索与对头相关的三个数,且判断是否满足条件
        if(hd-1>=0&&farmer[hd-1]==0)
        {
            q.push(hd-1);//该位置压入队列
            farmer[hd-1]=farmer[hd];//将对头数组值赋予该位置数组
        }
        if(hd+1<=2*y&&farmer[hd+1]==0)
        {
            q.push(hd+1);
            farmer[hd+1]=farmer[hd];
        }
        if(2*hd<=2*y&&farmer[2*hd]==0)
        {
            q.push(2*hd);
            farmer[2*hd]=farmer[hd];
        }
    }
}
int main()
{
    while(scanf("%d%d",&x,&y)!=EOF)
    {
        memset(farmer,0,sizeof(farmer));
   

你可能感兴趣的:(图论)