Determinante di una matrice in C++ - Alessandro Barazzuol

Determinante di una matrice in C++

Determinante con lo sviluppo di Laplace

/*Autore: Alessandro Barazzuol
Argomento: determinante di una matrice nxn
@Copyright Alessandro Barazzuol
*/

#include<iostream>
#include<ctime>
#include<string>
#include<cstdlib>
#include<cmath>

using namespace std;


//calcola la ridotta j-esima di una matrice  di dimensione dim
//mette la ridotta nella matrice s
void ridottaj(int a[100][100],int dim,int s[100][100],int c, int &d)
{
    
    int i,j;
    d=0;
    
    for(i=0;i<dim-1;i++)
    {
        
        d++;
        for(j=0;j<dim-1;j++)
            
        {
            if(j<c)
            {
                s[i][j]=a[i+1][j];
            }
            else
            {
                s[i][j]=a[i+1][j+1];
            }
            
            
        }
       
        
    }
    
    
    
    
}

//funzione ricorsiva, che calcola il determinante
int dete(int a[100][100],int dim)
{
    int d;//dimensione di ogni ridotta, viene valorizzata dalla 
          //funzione ridotta in quanto d è passasto per riferimento
    
    int temp[100][100];//matrice che ospita le ridotte
    int risultato=0;// variabile intera che ospita il determinate
    
    if(dim>2)
    {
        
        //percorre le colonne della matrice per estrapolare tutte le ridotte..j=0,j=1 ecc
        for(int j=0;j<dim;j++)
        {
            //calcola le ridotte j=0,j=1 ecc
            ridottaj(a,dim,temp,j,d);
            //per ognuna reitera finchè non resta una matrice 2x2
            risultato+=(1-2*(j%2))*a[0][j]*dete(temp,d);
         
        }
       
    }
    else
    {
        risultato=(a[0][0]*a[1][1]-a[0][1]*a[1][0]);
    }
    
    
    return risultato;
  
}


int main()
{
    int array1[100][100]={{1,2,3,4},{-9,-8,-7,6},{55,6,9,9},{2,9,-7,5}};
    cout<<dete(array1,4);
   
}