SP3926 MMAHWIRE - Manhattan Wire

题目描述

在一个由 $n \times m$ 格子组成的矩形区域内,有两个格子标记为“2”,另有两个格子标记为“3”。部分格子被障碍物占据。你的任务是用两条不相交的路径分别连接两个“2”和两个“3”。路径只能垂直或水平穿过没有障碍物的格子。 路径不能经过障碍物所在的格子,每个格子最多只能被一条路径使用一次。因此,一条路径不能与另一条路径交叉,也不能自相交。在这些限制条件下,你需要让两条路径的总长度尽可能短。路径的长度定义为它经过的格子边界的数量。具体而言,连接相邻格子的路径长度为 1。 图 1(a) 显示了一个示例配置。图 1(b) 显示了在这些约束条件下,总长度最小(18)的两条路径。

输入格式

输入由多个数据集组成,每个数据集的格式如下: ``` n m row1 … rown ``` 其中,$n$ 表示行数,满足 $2 \le n \le 9$;$m$ 表示列数,满足 $2 \le m \le 9$。每行 `rowi` 是由 $m$ 个数字组成的序列,数字之间用空格分隔。这些数字表示: - 0:空格 - 1:障碍物 - 2:标记为“2” - 3:标记为“3” 输入以一行“0 0”结束。 **样例输入** ``` 5 5 0 0 0 0 0 0 0 0 3 0 2 0 2 0 0 1 0 1 1 1 0 0 0 0 3 2 3 2 2 0 0 3 3 6 5 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 2 3 0 0 0 ```

输出格式

对于每个数据集,输出一行,其内容为两条路径的最小总长度。如果找不到满足条件的路径对,则输出 `0`。 **样例输出** ``` 18 2 17 ``` **本翻译由 AI 自动生成**