Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

行列確率の質問?


ここでは、1つの行列確率問題が表示されます。 1つの長方形の行列があります。現在のセルから4方向に同じ確率で移動できます。これらの4つの方向は、左、右、上、下です。 Nが位置M[i、j]から移動した後の確率を計算する必要があります。

ここでは、DFSに関連することを行います。現在の部屋から4つの可能な部屋のそれぞれを再帰的にトラバースします。次に、1回少ない移動で確率を計算します。 4つの方向のそれぞれが等しい確率を持っているので、各方向は合計確率の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

  1. Cプログラミングでスネークパターンで行列を印刷します。

    nxnサイズの配列が与えられた場合、プログラムは元の場所に変更を加えることなく、配列の要素をスネークパターンで印刷する必要があります 例 Input: arr[]= 100 99 98 97    93 94 95 96    92 91 90 89    85 86 87 88 Output: 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 プログラムは行列の各行をトラバースし、偶数行または奇数行をチェックします。 行が偶数の場合、その行の要素が左から右に印刷されます

  2. C++のチェス盤でのナイト確率

    NxNチェス盤が1つあるとすると、騎士はr番目の行とc番目の列から開始し、正確にK回移動しようとします。ここでは、行と列に0のインデックスが付けられているため、左上の正方形は(0、0)であり、右下の正方形は(N-1、N-1)です。 騎士はセルから8つの異なるセルに移動できます。これは、この図に示されています- 騎士が移動するたびに、8つの可能な移動の1つをランダムに選択します。騎士は、正確にK移動するか、チェス盤から離れるまで移動を続けます。騎士が動きを止めた後もボードに留まる確率を見つける必要があります。 したがって、入力が3、2、0、0のような場合、出力は0.0625になります