输入第一行为一个正整数T,表示有T组数据。每组数据的第一行为两个正整数m和n,分别表示迷宫地图的行数和列数。接下来有m行,每行有n个字符,表示迷宫地图中这行每一个中的图例表示。图例如下:#: 障碍格;*: 冒险者当前位置,为通行格;0-9: 每个宝箱所在位置,为通行格;.: 其它通行格其中冒险者当前位置在一个迷宫地图中是有且仅有一个的。表示宝箱的数字,在一个迷宫地图中最多只会出现一次,且如果有一个k(k0)号宝箱在迷宫地图中,则k-1号宝箱也必定会在迷宫地图中。 数据范围:对于所有数据,满足1
对于每一组数据,输出一个正整数。如果冒险者能收集完所有宝箱,则输出他共走了多少格,否则输出-1。
3 5 5 0...1 .#.#. ..*.. .#.#. 2...3 5 5 0...1 .#.#. ..*.# .#.#. 2.#.3 5 5 ....1 .#### ..*.. ####. 0....
16 -1 -1
在第一组数据中,冒险者先向上走2格,再向左走2格,收集了0号宝箱;然后向右走4格,收集了1号宝箱;然后向下走4格,收集了3号宝箱;再然后向右走4格,收集了2号宝箱,收集所有宝箱完成,共走了2+2+4+4+4=16格。
在第二组数据中,无法从当前位置走到3号宝箱所在的位置收集3号宝箱,因此无法完成收集所有宝箱的任务。
在第三组数据中,在初始位置依次执行策略:
1. 计算出与0号宝箱的曼哈顿距离为4,与1号宝箱的曼哈顿距离为4,因此选定0号宝箱;
2. 计算出当前位置到0号宝箱的最短路径长度为8,按上下左右的次序依次计算:
(1) 上方为障碍格,忽略;
(2) 下方为障碍格,忽略;
(3) 左方为通行格,如果走到左方的通行格,则到0号宝箱的最短路径长度为9,比当前的最短路径长度8大,因此不选择;
(4) 右方为通行格,如果走到右方的通行格,则到0号宝箱的最短路径长度为7,比当前的最短路径长度8小,因此向这个方向走一格。
3. 当前未收集完所有宝箱,回到策略步骤1继续执行;
4. 计算出与0号宝箱的曼哈顿距离为5,与1号宝箱的曼哈顿距离为3,因此选定1号宝箱;
5. 计算出当前位置到1号宝箱的最短路径长度为9,按上下左右的次序依次计算:
(1) 上方为障碍格,忽略;
(2) 下方为障碍格,忽略;
(3) 左方为通行格,如果走到左方的通行格,则到1号宝箱的最短路径长度为8,比当前的最短路径长度9大,因此向这个方向走一格;
6. 当前未收集完所有宝箱,回到策略步骤1继续执行。
要注意到此时,冒险者当前在初始位置上,且所有宝箱都还没有被收集,继续按策略执行的过程中,冒险者会在这个位置向右走一格再向左走一格的循环中,永远无法收集到所有宝箱。