#CF1949J. 变形虫阿曼达
变形虫阿曼达
J. 变形虫阿曼达
时间限制: 秒 内存限制: 兆字节
本题附有辅助文件,可以用来模拟并可视化变形虫的移动过程。
变形虫阿曼达生活在一个由方格像素组成的矩形网格中。它的身体占据其中一部分像素,其他像素可以是空闲的或被阻塞的。阿曼达通过所谓的变形虫式运动在网格中移动。在运动的每一步中,它的身体先收缩一个像素(一个身体像素被移除并变为空闲),然后在另一个位置生长一个像素(一个之前空闲的像素被加入身体)。
为了避免结构损坏,阿曼达的身体始终是一个连通的像素区域,即构成身体的任意一对像素都可以通过一条相邻像素构成的路径相连,且路径不离开身体。两个像素如果有公共边则视为相邻(每个像素至多 个邻居)。即使在移动过程中,身体也保持连通,包括移除一个像素之后、添加另一个像素之前的时刻。
你的任务是帮助阿曼达规划移动路线。给定初始形态和目标形态,给出一组合法移动序列,使其从前者变为后者。
输入格式
第一行两个整数 ()——网格的行数和列数。
接下来 行,每行 个字符,表示阿曼达的初始形态:
.:空闲像素*:变形虫身体X:永久阻塞像素,永远不能被占据
接下来一行是空行。
再接下来 行,以同样格式描述目标形态。
保证以下条件成立:
- 初始与目标形态的身体像素数量相同,且至少为 。
- 初始形态身体连通。
- 目标形态身体连通。
- 阻塞像素
X在初始与目标形态中位置完全相同。
输出格式
如果可以从初始形态到达目标形态,输出 YES,否则输出 NO。
若可以到达,在下一行输出一个整数 ()——移动步数。
接下来 行,每行四个整数坐标 (,),表示一步行动:
- 先移除第 行第 列的像素;
- 再将第 行第 列的像素加入身体。
序列必须全部合法,且执行完最后一步后身体恰好是目标形态。 多解时输出任意一解。
在题目条件下可以证明:若有解,则一定存在不超过 步的解法。
样例输入 1
5 8
.******.
**.X**..
*******.
**.X**..
.******.
.******.
...X****
.*******
...X****
.******.
样例输出 1
YES
5
3 1 3 8
2 1 2 8
4 1 4 8
2 2 4 7
4 2 2 7
样例输入 2
2 5
*.X..
**X..
..X**
..X*.
样例输出 2
NO
样例说明
第一个样例中,阿曼达用 步到达目标形态。 第二个样例中,初始区域与目标区域被阻塞格子完全隔开,无法到达。