目录

题目

思路

Code


题目

输入 m 和 n 两个数,m 和 n 表示一个 m*n 的棋盘。输入棋盘内的数据。棋盘中存在数字和"."两种字符,如果是数字表示该位置是一匹马,如果是"."表示该位置为空的,棋盘内的数字表示为该马能走的最大步数

例如棋盘内某个位置一个数字为 k,表示该马只能移动 1~k 步的距离。

棋盘内的马移动类似于中国象棋中的马移动,先在水平或者垂直方向上移动一格,然后再将其移动到对角线位置。

棋盘内的马可以移动到同一个位置,同一个位置可以有多匹马。

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


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

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


示例1:
输入

3 2
. .
2 .
. .
输出
0
示例2:
输入

3 5
4 7 . 4 8
4 7 4 4 .
7 . . . .
输出
17

思路

1:棋盘类的跳跃问题,BFS或者DFS的经典问题。

2:题目要求我们求出多匹马移动到同一个位置的最小步数,我们可以拆解下这个问题。我们先假定只有一匹马,那么我们用简单的BFS/DFS就可以求出这匹马到棋盘上每个位置所需要的步数。

3:那么对于多匹马,我们为每一匹马都计算出这样一个结果。并对结果进行对应位置的判断以及累加即可得出结果。

编辑

Code

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
from queue import Queue
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.


【华为od机试真题Python+JS+Java合集】【超值优惠】:Py/JS/Java合集

【华为od机试真题Python】:Python真题题库

【华为od机试真题JavaScript】:JavaScript真题题库

【华为od机试真题Java】:Java真题题库

【华为od机试真题C++】:C++真题题库

【华为od机试真题C语言】:C语言真题题库

【华为od面试手撕代码题库】:面试手撕代码题库

【华为od机试面试交流群:830285880】