poj 3278 Catch That Cow

来源:互联网 发布:大数据具体应用 编辑:程序博客网 时间:2024/06/15 22:27

这里写链接内容

题意 :人追头牛,有两种交通方式一种是步行,步行每次每分钟只能前进一个单位,或者后退一个单位,另一前进到种交通方式是瞬移,瞬移的话每次每分钟只能从当前位置x ,前进到位置2x ,问从n 到k最少用多少时间。

思路:我感觉很是惭愧啊, 这道题我做过的,但是呢 ,我却忘了,我刚开始用的深搜,没写出来,然后又用了最短路,还是没出来,后来我看了看自己以前写的代码,是用的广搜,后来用了广搜写了又wa了两次,因为其中的等号关系,,,,

代码

#include<stdio.h>#include<iostream>#include<string.h>#include<queue>const int N=200110;using namespace std;int n,k,i,j;int vis[N];struct node{    int x,time;};void bfs(){    queue<node>q;    node a;    a.x=n;    a.time=0;    q.push(a);    while(!q.empty())    {        a=q.front();        q.pop();        if(a.x==k)        {            printf("%d\n",a.time);            return ;        }        if(a.x>=1&&vis[a.x-1]==0)        {            node b;            b.x=a.x-1;            vis[a.x-1]=1;            b.time=a.time+1;            q.push(b);        }        if(a.x<=k&&vis[a.x+1]==0)        {  node b;            b.x=a.x+1;            vis[a.x+1]=1;            b.time=a.time+1;            q.push(b);        }        if(a.x<=k&&vis[2*a.x]==0)        {   node b;            b.x=2*a.x;            vis[a.x*2]=1;            b.time=a.time+1;            q.push(b);        }    }}int main(){    while(~scanf("%d%d",&n,&k))    {        memset(vis,0,sizeof(vis));        vis[n]=1;        bfs();    }    return 0;}
0 0
原创粉丝点击