目录
题目
思路
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
【华为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】