Leetcode 2850. Minimum Moves to Spread Stones Over Grid

  • [Leetcode 2850. Minimum Moves to Spread Stones Over Grid](#Leetcode 2850. Minimum Moves to Spread Stones Over Grid)
    • [1. 算法思路](#1. 算法思路)
    • [2. 代码实现](#2. 代码实现)

1. 算法思路

这一题由于棋盘比较小,只是一个3x3的棋盘,所有的移动策略总量有限,因此,这里我们直接的一个思路就是使用一个深度优先遍历来考察所有可能的移动策略,然后从中取出move总数最小的一种方案对应的结果。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def minimumMoves(self, grid: List[List[int]]) -> int:
        _from = [0 for _ in range(9)]
        _to = [0 for _ in range(9)]
        for i in range(3):
            for j in range(3):
                idx = i * 3 + j
                if grid[i][j] == 0:
                    _to[idx] = 1
                elif grid[i][j] > 1:
                    _from[idx] = grid[i][j] - 1
                    
        def cal_distance(i, j):
            r1, c1 = i//3, i%3
            r2, c2 = j//3, j%3
            return abs(r1-r2) + abs(c1-c2)
                    
        def dfs(idx):
            if idx >= 9:
                return 0
            if _from[idx] == 0:
                return dfs(idx+1)
            res = math.inf
            _from[idx] -= 1
            for i in range(9):
                if _to[i] == 0:
                    continue
                _to[i] = 0
                res = min(res, cal_distance(idx, i) + dfs(idx))
                _to[i] = 1
            _from[idx] += 1
            return res
        
        return dfs(0)

提交代码评测得到:1171ms,占用内存16.4MB。

相关推荐
01_10 天前
力扣hot100——岛屿数量 岛屿问题经典dfs总结
算法·leetcode·dfs
Tisfy13 天前
LeetCode 2209.用地毯覆盖后的最少白色砖块:记忆化搜索之——深度优先搜索(DFS)
算法·leetcode·深度优先·dfs·题解·记忆化搜索·深度优先搜索
robin_suli19 天前
floodfill算法系列一>被围绕的区域
算法·深度优先遍历
robin_suli1 个月前
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>不同路径 III
算法·剪枝·深度优先遍历·回溯
robin_suli1 个月前
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工
算法·剪枝·深度优先遍历·回溯
利刃大大1 个月前
【回溯+剪枝】单词搜索,你能用递归解决吗?
剪枝·深度优先遍历·回溯·递归
robin_suli1 个月前
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>单词搜索
算法·剪枝·深度优先遍历·回溯·递归
利刃大大1 个月前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
lisanndesu1 个月前
专题三_穷举vs暴搜vs深搜vs回溯vs剪枝_全排列
dfs·回溯
利刃大大1 个月前
【二叉树的深搜】二叉树剪枝
c++·算法·dfs·剪枝