#include <stdlib.h>
#include <alloc.h>
#include <stdio.h>
int detmat ( int *arr, int order );
void main( )
{
int *arr, sum, n, i, j, pos, num ;
printf ( "\nEnter value of n for ( n x n ) matrix " ) ;
scanf ( "%d", &n ) ;
/* allocate memory to accomodate the determinant */
arr = calloc (n * n,2) ;
printf ( "\nEnter numbers :\n" ) ;
for ( i = 0 ; i < n ; i++ )
{
for ( j = 0 ; j < n ; j++ )
{
scanf ( "%d", &num ) ;
pos = i * n + j ;
arr[pos] = num ;
}
}
sum = detmat ( arr, n ) ;
free ( arr ) ;
printf ( "\n%d", sum ) ;
}
int detmat ( int *arr, int order )
{
int sign = 1, sum = 0, i, j, k, count, *arr2 ;
int newsize, newpos, pos ;
if ( order == 1 )
return ( arr[0] ) ;
for ( i = 0 ; i < order ; i++, sign *= -1 )
{
/* copy n-1 by n-1 array into another array */
newsize = ( order - 1 ) * ( order - 1 ) ;
arr2 = calloc (newsize,2) ;
for ( j = 1 ; j < order ; j++ )
{
for ( k = 0, count = 0 ; k < order ; k++ )
{
if ( k == i )
continue ;
pos = j * order + k ;
newpos = ( j - 1 ) * ( order - 1 ) + count ;
arr2[newpos] = arr[pos] ;
count++ ;
}
}
/* find determinant value of n-1 by n-1 array and add it to sum */
sum = sum + arr[i] * sign * detmat ( arr2, order - 1 ) ;
free ( arr2 ) ;
}
return ( sum ) ;
}