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

Posted C+++++++++++++++++++

tags:

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

文章目录

题目

题目链接

题目详解

一个骑士有 8 8 8 种可能的走法,骑士会从中以等概率随机选择一种。部分走法可能会让骑士离开棋盘,另外的走法则会让骑士移动到棋盘的其他位置,并且剩余的移动次数会减少 1。

定义 d p [ s t e p ] [ i ] [ j ] dp[step][i][j] dp[step][i][j] 表示其实从棋盘商店的点 ( i , j ) (i,j) (i,j) 出发,走了 s t e p step step 步时仍然留在棋盘上的概率。

  • 当点 ( i , j ) (i,j) (i,j) 不在棋盘上的时候, d p [ s t e p ] [ i ] [ j ] = 0 ; dp[step][i][j] = 0; dp[step][i][j]=0;
  • 当点 ( i , j ) (i,j) (i,j) 在棋盘上且 s t e p = 0 step = 0 step=0 时, d p [ s t e p ] [ i ] [ j ] = 1 dp[step][i][j]=1 dp[step][i][j]=1
  • 对于其他情况, d p [ s t e p ] [ i ] [ j ] = 1 / 8 × ∑ d p [ s t e p − 1 ] [ i + d i ] [ j + d j ] dp[step][i][j]=1/8×∑dp[step-1][i+di][j+dj] dp[step][i][j]=1/8×dp[step1][i+di][j+dj]
    其中 ( d i , d j ) (di,dj) (di,dj) 表示走法对坐标的偏移量,具体为 ( − 2 , − 1 ) , ( − 2 , 1 ) , ( 2 , − 1 ) , ( 2 , 1 ) , ( − 1 , − 2 ) , ( − 1 , 2 ) , ( 1 , − 2 ) , ( 1 , 2 ) (−2,−1),(−2,1),(2,−1),(2,1),(−1,−2),(−1,2),(1,−2),(1,2) (2,1),(2,1),(2,1),(2,1),(1,2),(1,2),(1,2),(1,2) 8 8 8 种。

解题代码

class Solution 
public:
    vector<vector<int>> dirs = -2, -1, -2, 1, 2, -1, 2, 1, -1, -2, -1, 2, 1, -2, 1, 2;

    double knightProbability(int n, int k, int row, int column) 
        vector<vector<vector<double>>> dp(k + 1, vector<vector<double>>(n, vector<double>(n)));
        for (int step = 0; step <= k; step++) 
            for (int i = 0; i < n; i++) 
                for (int j = 0; j < n; j++) 
                    if (step == 0) 
                        dp[step][i][j] = 1;
                     else 
                        for (auto & dir : dirs) 
                            int ni = i + dir[0], nj = j + dir[1];
                            if (ni >= 0 && ni < n && nj >= 0 && nj < n) 
                                dp[step][i][j] += dp[step - 1][ni][nj] / 8;
                            
                        
                    
                
            
        
        return dp[k][row][column];
    
;

以上是关于leetcode打卡——骑士在棋盘上的概率的主要内容,如果未能解决你的问题,请参考以下文章

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

骑士之旅中的堆栈实现[关闭]

688马在棋盘上的概率

LeetCode668马在棋盘上的概率

骑士巡游问题

骑士走棋盘