HDU2717 Catch That Cow(C)

来源:互联网 发布:占星术杀人魔法 知乎 编辑:程序博客网 时间:2024/06/09 20:26

这里写图片描述
题意:给出初始点和目的地的位置。
有两种交通方式:步行和远程传送。
步行:可以在一分钟内从任何点X移动到X-1或X + 1点
传送:可以在一分钟内从任何点X移动到点2×X。
问最少几分钟到达目的地

#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>using namespace std;#define maxn 100000int n,k;bool vis[maxn*2+2];int num[maxn*2+2];void bfs(){    queue<int >q;    q.push(n);    vis[n]=1;    while(!q.empty())    {        int p=q.front();        q.pop();        if(p==k)//如果相等就输出        {            printf("%d\n",num[k]);            return;        }        int x=p+1;        if(x<=k&&!vis[x])//向前走一步  但不能超过了k还继续往前走 无意义        {            vis[x]=1;            num[x]=num[p]+1;            q.push(x);        }        x=p-1;        if(x>=0&&!vis[x])//向后退一步  不能退到0以后        {            vis[x]=1;            num[x]=num[p]+1;            q.push(x);        }        x=2*p;        if(p<k&&!vis[x])//步数乘2   如果超过了k还乘2  无意义        {            vis[x]=1;            num[x]=num[p]+1;            q.push(x);        }    }}int main(){   while(~scanf("%d%d",&n,&k))   {        memset(vis,0,sizeof vis);        memset(num,0,sizeof num);        bfs();   }    return 0;}