码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode668马在棋盘上的概率

时间:2018-12-08 13:07:20      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:rect   计算   nbsp   pen   国际象棋   range   abi   turn   oba   

已知一个 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马在棋盘上的概率

标签:rect   计算   nbsp   pen   国际象棋   range   abi   turn   oba   

原文地址:https://www.cnblogs.com/Li---Chao/p/10087107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!