T830132 逐级采集(collect)

题目描述

采集机器人所在的区域可以看作一个 $H$ 行 $W$ 列的网格。每个格子是空地、障碍、出发点或采集点之一。 区域中恰有 $K$ 个采集点,等级分别为 $1,2,\ldots,K$,每个等级恰好出现一次。机器人从出发点出发,初始等级为 $1$。 机器人每次可以移动到上、下、左、右相邻且没有障碍的格子,每次移动花费 $1$ 单位时间。当机器人位于一个尚未采集的采集点,且自身等级不低于该采集点等级时,可以立即采集它。采集不花时间,每采集一个点,机器人自身等级增加 $1$。每个采集点只能被采集一次。 机器人可以不采集而直接经过某个采集点。即使该点等级高于机器人当前等级,它所在的格子仍然可以经过。已采集的格子也可以再次经过。 请计算采集完全部 $K$ 个点所需的最短时间。保证机器人能够采集完全部采集点。

输入格式

第一行一个整数 $T$,表示数据组数。 每组数据第一行三个整数 $H,W,K$。 接下来 $H$ 行,每行一个长度为 $W$ 的字符串,描述网格。其中 `S` 表示出发点,`X` 表示障碍,`.` 表示空地,数字字符 `1` 至 `9` 表示对应等级的采集点。 保证每组恰有一个 `S`,每个等级 $1,2,\ldots,K$ 对应的数字字符恰好出现一次,且不出现其他数字字符。剩余格子都是 `X` 或 `.`。

输出格式

每组数据输出一行一个整数,表示最短时间。

说明/提示

机器人可以从左上角出发,向右移动两次,再向下移动两次,到达唯一的采集点并立即完成采集,总时间为 $4$。起点和终点在横、纵方向上各相隔两格,因此至少需要移动四次。 ## 样例 2 见 `考生目录/collect/collect2.in` 与 `考生目录/collect/collect2.ans`。该样例满足测试点 $1\sim6$ 的约束。 ## 样例 3 见 `考生目录/collect/collect3.in` 与 `考生目录/collect/collect3.ans`。该样例满足测试点 $7\sim12$ 的约束。 ## 样例 4 见 `考生目录/collect/collect4.in` 与 `考生目录/collect/collect4.ans`。该样例满足测试点 $13\sim20$ 的约束。 ## 样例 5 见 `考生目录/collect/collect5.in` 与 `考生目录/collect/collect5.ans`。该样例满足测试点 $13\sim20$ 的约束。 ## 样例 6 见 `考生目录/collect/collect6.in` 与 `考生目录/collect/collect6.ans`。该样例满足测试点 $13\sim20$ 的约束。 ## 数据范围 对于所有数据,保证 $1\le T\le10$。每组数据中,$1\le H,W\le1000$,$1\le K\le9$,且全部采集点均可完成采集。同一输入文件中,所有组的 $HW$ 之和不超过 $2\times10^6$。 | 测试点编号 | 附加限制(每组均满足) | | :--------: | :--------------------: | | $1\sim6$ | 没有障碍格 | | $7\sim12$ | $HW\le120$ | | $13\sim20$ | 无 |