POJ 3278 Catch That Cow(kuangbin带你飞 专题一:简单搜索)

来源:互联网 发布:淘宝官网下载免费下载 编辑:程序博客网 时间:2024/05/22 17:32

数字的简单BFS,给定起点终点和方式,可以对这个数字进行+1,-1,*2,因为k的范围是0-100000,所以数组起码开20W,小于0的情况直接不考虑。注意越界问题...

#include<cstdio>#include<cstring>#include<stdlib.h>#include<algorithm>#include<queue>#include<cmath>using namespace std;int used[300020];int n,k;struct node{    int num,t;};int ok(int x){    if(x<0||x>200000)//越界        return 0;    if(used[x]==1)        return 0;    return 1;}int bfs(){    queue<node> q;    node now,next;    now.num=n,now.t=0;    q.push(now);    memset(used,0,sizeof(used));    used[now.num]=1;    while(!q.empty())    {        now=q.front();        q.pop();        if(now.num==k)            return now.t;        next.num=now.num-1;        next.t=now.t+1;        if(ok(next.num))        {            q.push(next);            used[next.num]=1;        }        next.num=now.num+1;        next.t=now.t+1;        if(ok(next.num))        {             q.push(next);            used[next.num]=1;        }        next.num=now.num*2;        next.t=now.t+1;        if(ok(next.num))        {            q.push(next);            used[next.num]=1;        }    }    return -1;}int main(){    while(scanf("%d%d",&n,&k)!=EOF)    {        int ans=bfs();        printf("%d\n",ans);    }    return 0;}


0 0