zoukankan      html  css  js  c++  java
  • 牛客假日团队赛2 F.跳跃

    链接:

    https://ac.nowcoder.com/acm/contest/924/F

    题意:

    Farmer John为了满足奶牛对美的享受而安装了人工湖。矩形的人工湖分成M行N列(1 <= M <= 30; 1 <= N <= 30)的方形小格子。有些格子有美丽的荷叶,有些有岩石,剩下的格子有的只是美丽的蓝色湖水。
    Bessie通过从一片荷叶跳到另一片荷叶上来练习芭蕾。它现在正站在一片荷叶上(看输入数据了解具体位置)。它希望通过在荷叶上跳跃来到达另一片荷叶。它既不能跳到水里也不能跳到岩石上。
    只有新手才会感到吃惊:Bessie的跳跃有点类似国际象棋中马那样的移动,在一个方向上移动M1(1 <= M1 <= 30)“格”,然后再在斜方向上移动M2 (1 <= M2 <= 30; M1 != M2)格(或者也许在一个方向上移动M2格,然后在斜方向上移动M1格)。Bessie有时可能有多达8中的跳跃选择。
    给出池塘的构造以及Bessie跳跃的形式,找出Bessie从一个位置移动到另一个位置所需的最小的跳跃次数。这个跳跃对于所给的测试数据总是可能的。

    思路:

    BFS模板,唯一注意的就是下一步的位置。

    代码:

    #include <bits/stdc++.h>
     
    using namespace std;
     
    typedef long long LL;
    const int MAXN = 50 + 10;
    const int MOD = 1e9 + 7;
     
    struct Node
    {
        int x_, y_;
        int step_;
        Node(int x, int y, int step):x_(x), y_(y), step_(step){}
    };
     
    int n, m, k, t;
    int m1, m2, s, e;
     
    int Map[MAXN][MAXN];
     
    int Bfs(int Next[8][2])
    {
        queue<Node> que;
        que.emplace(s, e, 0);
        while (!que.empty())
        {
            Node now = que.front();
            que.pop();
            for (int i = 0;i < 8;i++)
            {
                int nx = now.x_+Next[i][0];
                int ny = now.y_+Next[i][1];
                if (nx < 1 || nx > n || ny < 1 || ny > m)
                    continue;
                if (Map[nx][ny] == 4)
                    return now.step_+1;
                if (Map[nx][ny] != 1)
                    continue;
                que.emplace(nx, ny, now.step_+1);
                Map[nx][ny] = 0;
            }
        }
        return 0;
    }
     
    int main()
    {
        cin >> n >> m >> m1 >> m2;
        for (int i = 1;i <= n;i++)
        {
            for (int j = 1; j <= m; j++)
            {
                cin >> Map[i][j];
                if (Map[i][j] == 3)
                    s = i, e = j;
            }
        }
        int Next[8][2] = {{-m1, -m2}, {-m1, m2}, {-m2, -m1}, {-m2, m1},
                          {m1, -m2}, {m1, m2}, {m2, -m1}, {m2, m1}};
        int res = Bfs(Next);
        cout << res << endl;
     
        return 0;
    }
    
  • 相关阅读:
    经典数据结构-红黑树
    POI excel处理
    Spring事务控制
    现代医院信息化建设策略与实践
    医院信息平台管理(医院信息集成平台)—— 概念扫盲
    医疗知识图谱的构建和应用
    常用日志采集框架对比
    CSS编码规范
    HTML编码规范
    【安全等保】Linux服务器基线安全--干货
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11037626.html
Copyright © 2011-2022 走看看