1 条题解

  • 0
    @ 2026-10-18 19:48:29

    本题考察的是网格图的奇偶性分析。

    1. 无解判定

    将 8×88 \times 8 的棋盘进行黑白相间染色。由于每次只能上下左右移动一格,所以每移动一步,必然从黑格走到白格,或从白格走到黑格(颜色交替)。

    要走遍全部 6464 个格子,总共需要移动 64−1=6364 - 1 = 63 步。因为 6363 是奇数,经过奇数次颜色交替后,终点格子的颜色必然与起点格子相反。

    因此,若起点与终点同色,必定无解。 判断两点是否同色,可以判断行号之差的绝对值与列号之差的绝对值的奇偶性是否相同:

    • 若 ∣x1−x2∣|x_1 - x_2| 与 ∣y1−y2∣|y_1 - y_2| 的奇偶性相同,说明两点同色,无解。
    • 若 ∣x1−x2∣|x_1 - x_2| 与 ∣y1−y2∣|y_1 - y_2| 的奇偶性不同,说明两点异色。

    2. 有解条件

    若起点和终点异色,在 8×88 \times 8 的无障碍网格中必然存在一条遍历所有格子的路径。直接输出 Yes 即可。

    • 时间复杂度:O(1)O(1),仅需进行简单的减法与奇偶性判断。

    参考代码 (C++)

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        
        // 判断行差与列差的奇偶性是否相同
        if (abs(x1 - x2) % 2 == abs(y1 - y2) % 2) {
            cout << "No\n"; // 同色,无解
        } else {
            cout << "Yes\n"; // 异色,有解
        }
        
        return 0;
    }
    

    附:正确性证明

    关于异色必定有解的正确性证明,涉及图论中的哈密顿路径相关知识,有能力可以自行了解。简单来说,证明思路是标准归纳构造:

    1. 先验证 2×22 \times 2、2×32 \times 3 等小矩形。
    2. 再对矩形行数或列数归纳,剥去不含端点的边界行或列,在较小矩形中构造路径。
    3. 最后把剥去的整行或整列以“蛇形”方式接入路径。

    由于剥去的是边界,异色关系保持不变,因此归纳可以进行。

    • 1

    信息

    ID
    1251
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    48
    已通过
    17
    上传者