首頁 >後端開發 >C++ >一個矩陣機率問題?

一個矩陣機率問題?

WBOY
WBOY轉載
2023-08-28 20:37:061006瀏覽

一個矩陣機率問題?

這裡我們將會看到一個矩陣機率問題。我們有一個矩形矩陣。我們可以以相同的機率從當前單元格移動四個方向。這四個方向是左、右、上、下。我們要計算從位置M[i,j]開始N次移動後的機率。

這裡我們要做一些與DFS相關的事情。我們將從目前房間開始遞歸遍歷四個可能的房間。然後我們就計算少走一步的機率。由於四個方向的機率相等,因此每個方向將貢獻總機率的 0.25。如果跨越矩陣邊界,我們將返回0,當N次移動完成時,將返回1。讓我們看看演算法來獲得這個想法。

演算法

matProb(m, n, x, y, N)

Begin
   if x,y is not in matrix boundary m, n, then return 0
   if N is 0 , then return 1
   prob := 0
   prob := prob + matProb(m, n, x-1, y, N-1) * 0.25
   prob := prob + matProb(m, n, x+1, y, N-1) * 0.25
   prob := prob + matProb(m, n, x, y+1, N-1) * 0.25
   prob := prob + matProb(m, n, x, y-1, N-1) * 0.25
   return prob
End

範例

#include<iostream>
using namespace std;
bool isSafe(int x, int y, int m, int n) { //function to check whether (x,y)
   is in matrix or not
   if(x >= 0 && x < m && y >= 0 && y < n){
      return true;
   }
   return false;
}
double matProb(int m, int n, int x, int y, int N) {
   if (!isSafe(x, y, m, n)) //if coundary is crossed
      return 0.0;
   if (N == 0) //when N is 0, or N is completed, return 1
      return 1.0;
   double probability = 0.0;
   probability += matProb(m, n, x - 1, y, N - 1) * 0.25; //move left
   probability += matProb(m, n, x, y + 1, N - 1) * 0.25; //move up
   probability += matProb(m, n, x + 1, y, N - 1) * 0.25; //move right
   probability += matProb(m, n, x, y - 1, N - 1) * 0.25; //move down
   return probability;
}
int main() {
   int m = 7, n = 8;
   int x = 1, y = 1;
   int N = 4;
   cout << "Matrix Probability is " << matProb(m, n, x, y, N);
}

輸出

Matrix Probability is 0.664062

以上是一個矩陣機率問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除