P2407 [SDOI2009] 地图复原

题目描述

很久以前,有一个传说中的“EWF”部族,他们世代生活在一个 $N×M$ 的矩形大地上。虽然,生活的地区有高山、有沼泽,但通过勤劳勇敢,渐渐地,他们在自己的地盘上修筑了一条回路。 后来,“EWF”部族神秘地消失了。不过,考古学家在那片他们曾经生活过的地方找到了一份地图。地图是 $N\times M$ 的矩阵,左上角的坐标为 $(0, 0)$,右下角的坐标为 $(N, M)$。矩阵中的每个格子,表示高山、沼泽、平地、房屋或是道路其中之一。如果一个格子表示道路,那么经过这个格子的道路要么是直走,要么是拐弯。如下图,左边2幅表示直走格子的,右边4幅表示需要拐弯的格子。一个表示道路的格子只能表示下列情况之一。 ![](https://cdn.luogu.com.cn/upload/pic/1588.png) 可是,由于地图的年代久远,考古学家虽然能分清一个格子代表的地形,可对于道路的标记,考古学家们只能分清这一格是表示直走的还是拐弯的。现在,他们求助于你,希望你能帮助他们复原这份“EWF”部族的地图。

输入格式

输入文件 `recover.in` 的第一行包含两个用空格分隔的正整数 $N$ 和 $M$,分别表示地图的高和长。 接下来一个 $N$ 行 $M$ 列的矩阵描述地图,矩阵中没有多余字符。 大写 `S`表示直走的道路,大写 `T` 表示拐弯的道路,点 `.` 表示高山、沼泽、平地和房屋。

输出格式

输出文件 `recover.out` 包含 $2N-1$ 行,每行 $2M-1$ 个字符,描述了这条回路。 所有第 $2i+1$ 行的 $2j+1$ 个字符为小写字母 `o`,表示了矩阵的第 $i$ 行第 $j$ 列的格子的中心 $(i, j)$。 若回路包含了 $(i, j )$ 到 $(i, j+1)$ 或 $ (i, j+1)$ 到 $(i, j)$ 的一条路径,则第 $2i+1$ 行的第 $2j+2$ 个字符为减号 `-`(ASCII 码为 $45$); 若回路包含了 $(i, j)$ 到 $ (i+1, j)$ 或 $(i+1, j)$ 到 $(i, j)$ 的一条路径,则第 $2i+2$ 行的第 $ 2j+1$ 个字符为竖线 `|`(ASCII码为 $124$)。 其它以上未说明位置上的字符为空格(ASCII 码为 $32$)。 输入数据保证至少存在一个合法解,故你的输出应有且仅有一条回路。如果存在多组答案,请输出任意一组。

说明/提示

对于 $20\%$ 的数据,有 $N \le 10$; 对于 $40\%$ 的数据,有 $1 \le N, M \le 80$; 对于 $40\%$ 的数据,输入没有 `.`,且 $N, M > 10$; 对于 $100\%$ 的数据,满足 $1 \le N, M \le 800$。