LeetCode668马在棋盘上的概率

Posted li---chao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode668马在棋盘上的概率相关的知识,希望对你有一定的参考价值。

已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始。即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1)。 

现有一个 “马”(也译作 “骑士”)位于 (r, c) ,并打算进行 K 次移动。 

如下图所示,国际象棋的 “马” 每一步先沿水平或垂直方向移动 2 个格子,然后向与之相垂直的方向再移动 1 个格子,共有 8 个可选的位置。

class Solution(object):
    def knightProbability(self, N, K, r, c):
        """
        :type N: int
        :type K: int
        :type r: int
        :type c: int
        :rtype: float
        """
        dp = []
        count = 0.0
        for i in range(K+1):
            temp1 = []
            for j in range(N):
                temp1.append([0] * N)
            dp.append(temp1)
        dp[0][r][c] = 1
        directions = [(1,2),(1,-2),(2,1),(2,-1),(-1,2),(-1,-2),(-2,1),(-2,-1)]
        for n in range(1,K+1):
            for x in range(N):
                for y in range(N):
                    for (X,Y) in directions:
                        if (x+X) >= 0 and (x+X) < N and (y+Y) >= 0 and (y+Y) < N:
                            dp[n][x][y] += dp[n-1][x+X][y+Y]                      #计算第n次棋盘中每个位置可能出现的次数
        for i in dp[-1]:
            for j in i:
                count += j
        return count / 8 ** K 

 

以上是关于LeetCode668马在棋盘上的概率的主要内容,如果未能解决你的问题,请参考以下文章

leetcode打卡——骑士在棋盘上的概率

LeetCode 688. 骑士在棋盘上的概率 / 1791. 找出星型图的中心节点 / 969. 煎饼排序(冒泡排序)

问题 D: 马走日

4123:马走日

002:马走日

马走日 (DFS)