কম্পিউটার

একটি গ্রাফ ম্যাট্রিক্সের বিপরীত অনুসন্ধান করার জন্য C++ প্রোগ্রাম


এটি একটি গ্রাফ ম্যাট্রিক্সের ইনভার্স খোঁজার জন্য একটি C++ প্রোগ্রাম। একটি ম্যাট্রিক্সের বিপরীত শুধুমাত্র তখনই বিদ্যমান থাকে যখন ম্যাট্রিক্সটি অ-একবচন হয় অর্থাৎ নির্ধারক 0 না হওয়া উচিত। একটি ম্যাট্রিক্সের বিপরীত বিভিন্ন উপায়ে বের করা যায়। এখানে আমরা অ্যাডজয়েন্ট ম্যাট্রিক্স এবং এর নির্ধারক ব্যবহার করে একটি গ্রাফ ম্যাট্রিক্সের বিপরীত খুঁজে বের করি। উদাহরণের সাথে জড়িত পদক্ষেপগুলি

Begin
   function INV() to get the inverse of the matrix:
   Call function DET().
   Call function ADJ().
   Find the inverse of the matrix using the formula;
   Inverse(matrix) = ADJ(matrix) / DET(matrix)
End.

উদাহরণ

#include<bits/stdc++.h>
using namespace std;
#define N 5
void getCfactor(int M[N][N], int t[N][N], int p, int q, int n) {
   int i = 0, j = 0;
   for (int r= 0; r< n; r++) {
      for (int c = 0; c< n; c++) //Copy only those elements which are not in given row r and column c: {
         if (r != p && c != q) { t[i][j++] = M[r][c]; //If row is filled increase r index and reset c index
            if (j == n - 1) {
               j = 0; i++;
            }
         }
      }
   }
}
int DET(int M[N][N], int n) //to find determinant {
   int D = 0;
   if (n == 1)
      return M[0][0];
   int t[N][N]; //store cofactors
   int s = 1; //store sign multiplier //
   To Iterate each element of first row
   for (int f = 0; f < n; f++) {
      //For Getting Cofactor of M[0][f] do getCfactor(M, t, 0, f, n); D += s * M[0][f] * DET(t, n - 1);
      s = -s;
   }
   return D;
}
void ADJ(int M[N][N],int adj[N][N])
//to find adjoint matrix {
   if (N == 1) {
      adj[0][0] = 1; return;
   }
   int s = 1,
   t[N][N];
   for (int i=0; i<N; i++) {
      for (int j=0; j<N; j++) {
         //To get cofactor of M[i][j]
         getCfactor(M, t, i, j, N);
         s = ((i+j)%2==0)? 1: -1; //sign of adj[j][i] positive if sum of row and column indexes is even.
         adj[j][i] = (s)*(DET(t, N-1)); //Interchange rows and columns to get the transpose of the cofactor matrix
      }
   }
}
bool INV(int M[N][N], float inv[N][N]) {
   int det = DET(M, N);
   if (det == 0) {
      cout << "can't find its inverse";
      return false;
   }
   int adj[N][N]; ADJ(M, adj);
   for (int i=0; i<N; i++) for (int j=0; j<N; j++) inv[i][j] = adj[i][j]/float(det);
   return true;
}
template<class T> void print(T A[N][N]) //print the matrix. {
   for (int i=0; i<N; i++) { for (int j=0; j<N; j++) cout << A[i][j] << " "; cout << endl; }
}
int main() {
   int M[N][N] = {
      {1, 2, 3, 4,-2}, {-5, 6, 7, 8, 4}, {9, 10, -11, 12, 1}, {13, -14, -15, 0, 9}, {20 , -26 , 16 , -17 , 25}
   };
   float inv[N][N];
   cout << "Input matrix is :\n"; print(M);
   cout << "\nThe Inverse is :\n"; if (INV(M, inv)) print(inv);
   return 0;
}

আউটপুট

Input matrix is :
1 2 3 4 -2
-5 6 7 8 4 
9 10 -11 12 1 
13 -14 -15 0 9 
20 -26 16 -17 25
The Inverse is : 
0.0811847 -0.0643008 0.0493814 -0.0247026 0.0237006 
-0.126819 -0.0161738 0.0745377 -0.0713976 0.0151639 
0.0933664 0.0028245 -0.0111876 -0.0220437 0.0154006 
0.143624 0.0582573 -0.0282371 0.0579023 -0.0175466 
-0.15893 0.0724272 0.0259728 -0.00100988 0.0150219

  1. কার্ড গেমের বিজয়ী খুঁজে পেতে C++ প্রোগ্রাম

  2. চতুর্ভুজের চতুর্থ বাহু খুঁজে পেতে C++ প্রোগ্রাম

  3. একটি গ্রাফে সুপার শীর্ষবিন্দুগুলি খুঁজে বের করার জন্য C++ প্রোগ্রাম

  4. C++-এ idempotent ম্যাট্রিক্স চেক করার প্রোগ্রাম