POJ 3278 Catch That Cow 简单bfs

Posted 00isok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3278 Catch That Cow 简单bfs相关的知识,希望对你有一定的参考价值。

题目链接

 

题目大意:

 

 FJ要抓奶牛。

  开始输入N(FJ的位置)K(奶牛的位置)。

 

  FJ有三种移动方法:1、向前走一步,耗时一分钟。

 

                                 2、向后走一步,耗时一分钟。

 

                                 3、向前移动到当前位置的两倍N*2,耗时一分钟。

 

 问FJ抓到奶牛的最少时间。

PS:奶牛是不会动的。

 

#include <stdio.h>           
#include <string.h>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
int vis[100005];
int n, k;
struct dian
{
    int x;
    long long s;
};
queue<dian>q;

long long bfs()
{
    int i, j;
    dian now, next;
    while (!q.empty())
    {
        now = q.front();
        q.pop();
        if (now.x == k)break;
        if (now.x - 1 >= 0 && !vis[now.x - 1])
        {
            next.x = now.x - 1;
            vis[next.x] = 1;
            next.s = now.s + 1;
            q.push(next);
        }
        if (now.x + 1 <=100000 && !vis[now.x + 1])
        {
            next.x = now.x + 1;
            vis[next.x] = 1;
            next.s = now.s + 1;
            q.push(next);
        }
        if (now.x *2 <= 100000 && !vis[now.x * 2])
        {
            next.x = now.x * 2;
            vis[next.x] = 1;
            next.s = now.s + 1;
            q.push(next);
        }
    }
    return now.s;
}

int main()
{
    int i, j;
    dian now;
    while (scanf("%d%d", &n, &k) != EOF)
    {
        memset(vis, 0, sizeof(vis));
        while (!q.empty())q.pop();
        now.x = n;
        now.s = 0;
        vis[now.x] = 1;
        q.push(now);
        printf("%lld\n", bfs());
    }
    return 0;
}

 

2018-03-31

 

以上是关于POJ 3278 Catch That Cow 简单bfs的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3278 Catch That Cow

poj3278Catch That Cow

POJ 3278: Catch That Cow

poj3278 Catch That Cow

POJ 3278 - Catch That Cow - [BFS]

poj3278Catch That Cow