Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Wyznacznik wg rekurencyjnego rozwinięcia Laplace'a
- // Data : 8.02.2011
- // (C)2012 mgr Jerzy Wałaszek
- //----------------------------
- #include <iostream>
- #include <iomanip>
- using namespace std;
- // Rekurencyjna funkcja obliczająca rozwinięcie Laplace'a
- //-------------------------------------------------------
- double det(int n, int w, int * WK, double ** A)
- {
- int i,j,k,m, * KK;
- double s;
- if(n == 1) // sprawdzamy warunek zakończenia rekurencji
- return A[w][WK[0]]; // macierz 1 x 1, wyznacznik równy elementowi
- else
- {
- KK = new int[n - 1]; // tworzymy dynamiczny wektor kolumn
- s = 0; // zerujemy wartość rozwinięcia
- m = 1; // początkowy mnożnik
- for(i = 0; i < n; i++) // pętla obliczająca rozwinięcie
- {
- k = 0; // tworzymy wektor kolumn dla rekurencji
- for(j = 0; j < n - 1; j++) // ma on o 1 kolumnę mniej niż WK
- {
- if(k == i) k++; // pomijamy bieżącą kolumnę
- KK[j] = WK[k++]; // pozostałe kolumny przenosimy do KK
- }
- s += m * A[w][WK[i]] * det(n - 1,w + 1, KK, A);
- m = -m; // kolejny mnożnik
- }
- delete [] KK; // usuwamy zbędną już tablicę dynamiczną
- return s; // ustalamy wartość funkcji
- }
- }
- //*** PROGRAM GŁÓWNY ***
- //----------------------
- int main()
- {
- int n,i,j; // stopień macierzy
- int * WK; // wektor kolumn
- double ** A; // macierz
- cout << fixed << setprecision(4);
- cin >> n; // odczytujemy stopień macierzy
- A = new double * [n]; // tworzymy macierz wskaźników
- for(i = 0; i < n; i++)
- {
- A[i] = new double[n]; // tworzymy wiersz
- for(j = 0; j < n; j++) cin >> A[i][j]; // czytamy wiersz macierzy
- }
- WK = new int[n]; // tworzymy wiersz kolumn
- for(i = 0; i < n; i++) // wypełniamy go numerami kolumn
- WK[i] = i;
- cout << endl;
- cout << det(n, 0, WK, A) << endl; // obliczamy i wyświetlamy wyznacznik
- delete [] WK; // usuwamy tablice dynamiczne
- for(i = 0; i < n; i++) delete [] A[i];
- delete [] A;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement