P3070 [USACO13JAN] Island Travels G

题目描述

农夫约翰带着奶牛去海边度假了。 奶牛们住在 $N$ 个岛屿上($1 \le N \le 15$),这些岛屿位于 $R \times C$ 的方格矩阵中($1 \le R,C \le 50$)。 岛屿是标记为 `X` 的方格,如果两个 `X` 共享一条边,则这两个 `X` 是相连的。(因此,共享一个角的两个 `X` 不一定相连) 然后,贝茜来晚了,所以她要和约翰一起乘坐直升飞机过去。 她可以选择任何一个岛屿并首先到达该岛。 她想看望每头奶牛至少一次,因此,她需要在岛屿之间旅行,直到她去过每个岛屿至少一次为止。 由于约翰的直升飞机燃料快用完了,所以直到奶牛们玩够了回家之前,他都不想动用这架飞机。 幸运的是有一些方格区域是浅水区,用 `S` 表示。 贝茜可以在浅水区沿四个基本方向游动,以便在各岛之间穿行。 她还可以在岛屿和浅水区之间沿四个基本方向行进,反之亦然。 请求出贝茜为了成功抵达所有岛屿所需要的最短游泳距离。 游泳距离是指贝茜在行进过程中到达标有 `S` 的方格区域的次数。 看完该地区的地图后,贝茜知道自己一定能成功抵达所有岛屿。

输入格式

第一行包含两个整数 $R$ 和 $C$。 接下来 $R$ 行,每行包含 $C$ 个字符用来描述方格矩阵。字符 . 表示深水方格区域,`X` 表示岛屿方格区域,`S` 表示浅水方格区域。

输出格式

输出贝茜为了成功抵达所有岛屿所需要的最短游泳距离。

说明/提示

贝茜可以在左上角岛屿着陆,然后按照右、下、下、右、右、下、下的方式行进,抵达所有岛屿。 期间共处于 `S` 方格中 $3$ 次。