Rumah >pembangunan bahagian belakang >C++ >Masalah kebarangkalian matriks?

Masalah kebarangkalian matriks?

WBOY
WBOYke hadapan
2023-08-28 20:37:061006semak imbas

Masalah kebarangkalian matriks?

Di sini kita akan melihat masalah kebarangkalian matriks. Kami mempunyai matriks segi empat tepat. Kita boleh bergerak dalam empat arah dari sel semasa dengan kebarangkalian yang sama. Empat arah adalah kiri, kanan, atas, dan bawah. Kami ingin mengira kebarangkalian selepas N bergerak bermula dari kedudukan M[i,j].

Di sini kita akan melakukan beberapa perkara yang berkaitan dengan DFS. Kami akan melintasi empat bilik yang mungkin secara rekursif bermula dari bilik semasa. Kemudian kami mengira kebarangkalian mengambil satu langkah yang kurang. Oleh kerana empat arah mempunyai kebarangkalian yang sama, setiap arah akan menyumbang 0.25 daripada jumlah kebarangkalian. Kami akan mengembalikan 0 jika sempadan matriks dilalui dan 1 apabila N bergerak selesai. Mari lihat algoritma untuk mendapatkan idea ini.

Algoritma

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

Contoh#🎜🎟#rreee🎜#rreee 🎜🎜#
#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);
}

Atas ialah kandungan terperinci Masalah kebarangkalian matriks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam