zoukankan      html  css  js  c++  java
  • 搜索 || BFS || POJ 3278 Catch That Cow

    农夫在x位置,下一秒可以到x-1, x+1, 2x,问最少多少步可以到k
    *解法:最少步数bfs
    要注意的细节蛮多的,写在注释里了
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    queue<int> q;
    int vis[200005], arr[200005];
    void go(int n, int k)
    {
        q.push(n);
        vis[n] = 1;
        int flag = 0;
        while(!q.empty())
        {
            if(flag) break;
            int head = q.front(); q.pop();
            int direct[3] = {1, -1, head};
            if(head == k) return;
            for(int i = 0; i < 3; i++)
            {
                int next = head + direct[i];
                if(next >= 0 && next <= 200000 && !vis[next])//坐标一共有1e5但是可以移动到2x 所以next<=2e5;然后next可能小于0,vis[next]直接RE,所以把vis[next]放在最后,先判next>= 0
                {
                    q.push(next);
                    vis[next] = 1;
                    arr[next] = arr[head] + 1;
                }
                if(next == k) flag = 1;
            }
        }
        return;
    }
    int main()
    {
        int n, k;
        while(scanf("%d %d", &n, &k) != EOF)
        {
            while(!q.empty()) q.pop();
            memset(vis, 0, sizeof(vis));
            memset(arr, 0, sizeof(arr));
            go(n, k);
            printf("%d
    ", arr[k]);
        }
        return 0;
    }
  • 相关阅读:
    4815 江哥的dp题a
    CON1023 明明的计划
    5200 fqy的难题----2的疯狂幂
    [SCOI2005] 最大子矩阵
    1457 又是求和?
    2064 最小平方数
    vijos P1459车展
    1366 xth 的第 12 枚硬币
    1360 xth 的玫瑰花
    3223: Tyvj 1729 文艺平衡树
  • 原文地址:https://www.cnblogs.com/pinkglightning/p/8410400.html
Copyright © 2011-2022 走看看