P6889 [CEOI 2006] CONNECT

题目描述

早些年,当著名的十六位三字母操作系统最常用于 25x80 终端并主导 PC 市场时,“Nibbles” 是每个人最喜欢的电脑游戏。然而,这个问题与 Nibbles 无关——它与一个名为“Connect”的游戏有关,这个游戏几乎完全不像 Nibbles。 Connect 在一个由方格组成的棋盘上进行,棋盘由 R 行和 C 列组成,其中 R 和 C 都是**奇数**。行和列分别编号为 1 到 R 和 1 到 C。棋盘上的每个位置要么是空闲的,要么被墙壁阻挡。此外,每个棋盘满足以下约束: - **两个坐标都是偶数**的方格称为房间。它们**永远不会被阻挡**。 - **两个坐标都是奇数**的方格称为障碍物。它们**总是被阻挡**。 - 所有其他方格称为走廊。它们可能被阻挡,也可能不被阻挡。 - **沿着棋盘边缘**的走廊**总是被阻挡**。 障碍物用 '+'(加号)字符表示,阻挡的水平走廊用 '|'(竖线)字符表示,而阻挡的垂直走廊用 '–'(减号)字符表示。房间和空闲走廊用空白字符表示。 在游戏开始时,**偶数个**棋子(用大写字母 'X' 表示)被放置在棋盘上——每个棋子在一个单独的**房间**里。棋子 A 和 B 之间的路径是一系列**空闲**方格,从 A 开始,以 B 结束,每一步都在**四个可能的方向**之一移动(路径包括两个端点方格,A 和 B)。路径的长度是从 A 到 B 所需的总步数(等于路径中包含的方格数减一)。 玩家的目标是首先**将所有棋子分成对**,然后,对于每对棋子,**用路径连接**这两个棋子。对应该以这样的方式连接,即**没有两条路径共享一个公共方格**。 对于完成的游戏,得分定义为所有路径的长度之和。 编写一个程序,给定 Connect 游戏的起始位置,以实现**可能的最小得分**来进行游戏。测试数据将保证一个解,尽管不一定是唯一的,总是存在的。

输入格式

第一行输入为两个整数:$R$ 和 $C$,其中 $R$ 为行数,$C$ 为列数,$R$,$C$ 均为奇数。 接下来的 $R$ 行每行包括 $C$ 个字符,每个字符都是 `+`、`|`、`-`、空格或 `X` 中的一个,分别表示障碍及两种墙壁,空格表示房间或可通过的走廊,`X` 表示房间中的物品。

输出格式

输出的第一行是一个整数,即最小分值。 本题**不要求**输出合法方案。

说明/提示

$5 \leqslant R \leqslant 25$,$5 \leqslant C \leqslant 80$。 题面翻译由 ChatGPT-4o 提供。