首页 > 其他分享 >【每日一题】 688. 骑士在棋盘上的概率

【每日一题】 688. 骑士在棋盘上的概率

时间:2024-12-07 17:43:50浏览次数:3  
标签:移动 int 单元格 dfs 688 骑士 棋盘

在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - 1, n - 1) 。

象棋骑士有8种可能的走法,如下图所示。每次移动在基本方向上是两个单元格,然后在正交方向上是一个单元格。

每次骑士要移动时,它都会随机从8种可能的移动中选择一种(即使棋子会离开棋盘),然后移动到那里。

骑士继续移动,直到它走了 k 步或离开了棋盘。

返回 骑士在棋盘停止移动后仍留在棋盘上的概率 。

 

 

dfs

 

DIRS = (2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2), (2, -1)

class Solution:
    def knightProbability(self, n: int, k: int, row: int, column: int) -> float:
        @cache  # 缓存装饰器,避免重复计算 dfs 的结果(记忆化)
        def dfs(k: int, i: int, j: int) -> float:
            if not (0 <= i < n and 0 <= j < n):  # 出界
                return 0
            if k == 0:  # 走完了,仍然在棋盘上
                return 1
            return sum(dfs(k - 1, i + dx, j + dy) for dx, dy in DIRS) / 8
        return dfs(k, row, column)

 

标签:移动,int,单元格,dfs,688,骑士,棋盘
From: https://www.cnblogs.com/xxlm/p/18592448

相关文章

  • 【Leetcode 每日一题】688. 骑士在棋盘上的概率
    问题背景在一个n×nn\timesnn×n的国际象棋棋盘上,一个骑士从单元格......
  • leetcode 2056. 棋盘上有效移动组合的数目
    classSolution{private:  vector<vector<int>>RMove={{1,0},{-1,0},{0,1},{0,-1}};  vector<vector<int>>BMove={{1,1},{-1,-1},{-1,1},{1,-1}};public:  boolCheckMove(intsx,intsy,intx,inty,intstep,vector<vector......
  • 如何运用Python爬虫快速获得1688商品详情数据
    在数字化时代,数据的价值日益凸显,尤其是在电商领域。对于企业来说,获取竞争对手的商品信息是分析市场趋势、制定营销策略的重要手段。1688作为中国领先的B2B电商平台,拥有海量的商品数据。本文将介绍如何使用Python编写爬虫程序,以合法合规的方式快速获取1688商品详情,为电商企业提......
  • 20241204: 2056. 棋盘上有效移动组合的数目
    有一个 8x8 的棋盘,它包含 n 个棋子(棋子包括车,后和象三种)。给你一个长度为 n 的字符串数组 pieces ,其中 pieces[i] 表示第 i 个棋子的类型(车,后或象)。除此以外,还给你一个长度为 n 的二维整数数组 positions ,其中 positions[i]=[ri,ci] 表示第 i 个棋子现在......
  • 【LeetCode】每日一题 —— 2056. 棋盘上有效移动组合的数目
    一、题目2056.棋盘上有效移动组合的数目有一个8∗88*88∗8的棋盘,它包含n个棋子(棋子包括车,后和象三种)......
  • 【Leetcode 每日一题】2056. 棋盘上有效移动组合的数目
    问题背景有一个8×88\times88×8的棋盘,它包含n......
  • 【力扣】3274. 检查棋盘方格颜色是否相同
    一、题目给你两个字符串coordinate1和coordinate2,代表8x8国际象棋棋盘上的两个方格的坐标。以下是棋盘格的参考图:如果这两个方格颜色相同,返回true,否则返回false。坐标总是表示有效的棋盘方格。坐标的格式总是先字母(表示列),再数字(表示行)。示例:输入:coordinate1......
  • 3274. 检查棋盘方格颜色是否相同
    给你两个字符串coordinate1和coordinate2,代表8x8国际象棋棋盘上的两个方格的坐标。以下是棋盘的参考图。如果这两个方格颜色相同,返回true,否则返回false。坐标总是表示有效的棋盘方格。坐标的格式总是先字母(表示列),再数字(表示行)。示例1:输入:coordinate1="a1",coo......
  • 如何运用Java爬虫获得1688商品详情数据
    在电商领域,获取商品数据是进行市场分析和竞争情报收集的重要步骤。1688作为中国领先的B2B电商平台,其商品数据对于商家来说具有极高的价值。本文将详细介绍如何使用Java编写爬虫程序,以合法合规的方式获取1688平台的商品信息,并提供详细的代码示例。1.环境准备在开始编写爬虫......
  • 代码随想录算法训练营day61| 卡码网97.小明逛公园 127.骑士的攻击
    学习资料:https://www.programmercarl.com/kamacoder/0097.小明逛公园.htmlfloyd算法,三维矩阵A*算法学习记录:97.小明逛公园(没看懂,抄的)点击查看代码#三维数组Floydif__name__=="__main__":max_int=10005n,m=map(int,input().split())grid=[[[max_......