P3053 [USACO12OPEN] Unlocking Blocks S

题目描述

一个鲜为人知的事实是,奶牛非常喜欢解谜!为了庆祝贝西的生日,农夫约翰给了她一个有趣的机械谜题让她来解决。这个谜题由三个实心物体组成,每个物体都是由 1x1 的单位正方形粘合在一起构成的。每个物体都是一个「连通」的形状,也就是说,你可以通过在物体上的正方形向北、南、东或西移动,从物体上的一个正方形到达另一个正方形。 一个物体可以通过不断地向北、南、东或西滑动一个单位来移动。谜题的目标是移动这些物体,使它们分开——即它们的边界框不再有任何正重叠。给定三个物体的形状和位置,你的任务是帮助贝西决定分开这些物体所需的最少滑动次数。 ![](https://cdn.luogu.com.cn/upload/image_hosting/flelqdzu.png)

输入格式

\* 第 1 行:三个用空格分隔的整数 $N_1$,$N_2$ 和 $N_3$,分别表示组成物体 1、2 和 3 的单位正方形的数量。 \* 第 2 行到第 $1+N_1$ 行:每行描述一个 (x,y) 坐标,表示组成物体 1 的一个单位正方形的西南角的位置。所有坐标都在 0 到 9 的范围内。 \* 第 $2+N_1$ 行到第 $1+N_1+N_2$ 行:每行描述一个 (x,y) 坐标,表示组成物体 2 的一个单位正方形的西南角的位置。所有坐标都在 0 到 9 的范围内。 \* 第 $2+N_1+N_2$ 行到第 $1+N_1+N_2+N_3$ 行:每行描述一个 (x,y) 坐标,表示组成物体 3 的一个单位正方形的西南角的位置。所有坐标都在 0 到 9 的范围内。

输出格式

\* 第 1 行:分开三个物体所需的最少移动次数,或者如果物体无法分开则输出 -1。

说明/提示

物体 1 由 12 个正方形组成,物体 2 由 3 个正方形组成,物体 3 由 5 个正方形组成。物体的形状如上图所示。 如果我们将物体 3 向东滑动一个位置,然后将物体 2 向北滑动一个位置,然后将物体 1 向西滑动三个位置,那么三个物体的边界框将不再有任何重叠。 物体 1 由 12 块小正方体制成,物体 2 由 3 块小正方体制成,物体 3 由 5 块小正方体制成。最后的图像如上所示。(吃图?!) ```cpp A:物体 1 方块 B:物体 2 方块 C:物体 3 方块 *:什么都没有 A A A A C A * C C C A B B * C A * B A * A A A A * ``` 假如我们把物体 3 向东移一个单位,然后把物体 2 向北移一个单位,然后把物体 1 向西移三个单位,就满足了条件。 感谢 @姚起龙 提供翻译 (由 ChatGPT 4o 翻译)