您的位置:首页 > 其它

poj 3278 Catch That Cow

2014-03-13 12:56 274 查看
题目大意:

给定一起点n和一终点k,从n点开始每次可以选择到达n+1或n-1或2*n;

求最小的移动次数使得最终到达k点;

本题可用bfs搜索,从起点开始将可以到达的地方全部记录下来,然后又从这些点出发搜索,依次进行下去,直到到达k点为止;

代码如下:

#include<stdio.h>

#include<string.h>

int  n,k;

int step[9999999];

int dui[9999999];

int visit[9999999];

int dir[2]={-1,1};

int check(int n)

{

    if(n==k)

    return 1;

    return 0;

}

int main()

{

    int i,j,l,m,s;

int r=0,p=0,o=0;

    scanf("%d%d",&n,&k);

    dui[r++]=n;

    if(check(n))

    {

        printf("0\n");

       return 0;

    }

    while(p<r)

    {

        m=dui[p++];

        visit[m]=1;

        for(i=0;i<3;i++)

        {

            s=m;

            if(i==2)

            {

                s=2*s;

            }

            else

            {

                s+=dir[i];

            }

            if(check(s))

            {

                printf("%d\n",step[m]+1);

               return 0;

            }

            if(s>=0&&visit[s]==0&&s<1000000)

            {

                dui[r++]=s;

                visit[s]=1;

                step[s]=step[m]+1;

            }

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj bfs