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

Masalah kebarangkalian matriks?

WBOY
Lepaskan: 2023-08-28 20:37:06
ke hadapan
1016 orang telah melayarinya

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
Salin selepas log masuk

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);
}
Salin selepas log masuk

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

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan