#include <stdio.h>
#include <math.h>

void zerar(int n,int m[][n]) {
    int i, j;
    for (i=0; i<n; i++) {
        for (j=0; j<n; j++) {
            m[i][j] = 0;
        }
    }
}

void printm(int n, int matriz[][n]) {
    int i,j;
    for (i=0; i<n; i++) {
        for (j=0; j<n; j++) {
            printf("\t%d", matriz[i][j]);
        }
        printf("\n");
    }
}

int det(int n, int matriz[][n]) {
    int i, j, k, x, y, soma=0, aux[n-1][n-1];
    zerar(n, aux);
    if (n < 1) {}
    else if (n == 1) {
        return matriz[0][0];
    }
    else if (n == 2) {
        soma = (matriz[0][0] * matriz[1][1]) - (matriz[0][1] * matriz[1][0]);
        return soma;
    }
    else {
        for (i=0; i<n; i++) {
            for (j=1, x=0; j<n; j++) {
                for (k=0, y=0; k<n; k++) {
                    if (k == i) {
                        continue;
                    }
                    else {
                        printf("\n\n");
                        printm(n-1, aux);
                        aux[x][y] = matriz[j][k];
                        printf("\nx=%d, y=%d, j=%d, k=%d, i=%d\n", x, y, j, k, i);
                        y++;
                    }
                }
                x++;
            }
            soma += matriz[0][i]*pow(-1, i+2)*det(n-1, aux);
        }
        return soma;
    }
}


int main()
{
    int m[3][3] = {{4, 3, 2}, {1, 4, 5}, {2, 1, 2}};
    det(3, m);
    printf("%d", det(3, m));
    printf("\n\n");
    printm(3, m);
    printf("\n\n");
}