AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3706. 跳马问题

困难通过率 56% · 提交 339 · 通过 190
BFS图论矩阵模拟

小慕有一个 m 行 n 列的棋盘。他输入了棋盘上的数据。棋盘上每个格子要么是数字,要么是字符“.”。数字表示该格子上有一匹马,数字的值表示这匹马最多能移动的步数;字符“.”表示该格子是空的。 例如,如果棋盘上某个位置的数字是 k,表示该马每次移动时,可以走 1 到 k 步中的任意一个步数。 棋盘上马的移动规则类似于中国象棋中的马:先沿水平或垂直方向移动一格,再沿对角线方向移动一格。 马可以移动到同一个格子,同一个格子上可以同时有多匹马。 小慕想知道:是否可以将棋盘上所有的马都移动到同一个格子?如果可以,输出移动所需的最小总步数;如果不可以,输出 0。

提示:带虚线的词点一下有通俗解释。

输入描述

输入m 和 n 两个数,m 和 n 表示一个 m*n 的棋盘。输入棋盘内的数据。

输出描述

能否将棋盘上所有的马移动到同一个位置,若可以请输入移动的最小步数。若不可以输出 0。

示例

示例 1

输入

3 5
4 7 . 4 8
4 7 4 4 .
7 . . . .

输出

17

示例 2

输入

3 2
. .
2 .
. .

输出

0

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
马(数字位置) 目标汇聚点 马移动路径(步数累加)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「跳马问题」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。