Poj-3278

来源:互联网 发布:数据恢复精灵好用吗 编辑:程序博客网 时间:2024/05/16 12:12

一个农夫和一头牛,已知坐标两者坐标,从X可移动X-1,X+1,X*2步,最少几步抓到牛。

#include <iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct node{    int num;    int count;    node() {}    node(int n,int c)    {        num=n;        count = c;    }};node queue[1000000];int  vis[2000010];int bfs(int n,int k){    if(n==k)        return 0;    node n0(n,0);    memset(vis,0,sizeof(vis));    int t=0,e=0;    queue[e++]=n0;    vis[n] = 1;    while(t!=e)    {        node temp=queue[t++];        if(t>=1000000)            t=0;        node n1(temp.num -1,temp.count+1);        node n2(temp.num +1,temp.count+1);        node n3(temp.num *2,temp.count+1);        if(n1.num==k)            return n1.count;        if(n2.num==k)            return n2.count;        if(n3.num==k)            return n3.count;        if(n1.num<150005&&n1.num>=0&&vis[n1.num]==0)        {            queue[e++]=n1;            if(e>=1000000)                e=0;            vis[n1.num]=1;        }        if(n2.num<150005&&n2.num>=0&&vis[n2.num]==0)        {            queue[e++]=n2;            if(e>=1000000)                e=0;            vis[n2.num]=1;        }        if(n3.num<150005&&n3.num>=0&&vis[n3.num]==0)        {            queue[e++]=n3;            if(e>=1000000)                e=0;            vis[n3.num]=1;        }    }}int main(){    int n,k;    while(~scanf("%d%d",&n,&k))    {        printf("%d\n",bfs(n,k));    }    return 0;}
0 0
原创粉丝点击