#include <stdio.h> #include <string.h> typedef int number; number determinant(number **m, int n) { return 6; } void swap_cell(number **m, int x1, int y1, int x2, int y2) { //printf("(%d %d)<->(%d %d)\n", x1, y1, x2, y2); number l = m[x1][y1]; m[x1][y1] = m[x2][y2]; m[x2][y2] = l; } void swap_x(number **m, int n, int fromy, int toy) { int i; for (i = 0; i < n; ++i) swap_cell(m, i, fromy, i, toy); } void swap_y(number **m, int n, int fromx, int tox) { int i; for (i = 0; i < n; ++i) swap_cell(m, fromx, i, tox, i); } number _minor(number **m, int n, int i, int j) { swap_x(m, n, j, n-1); swap_y(m, n, i, n-1); number r = (i*j) & 1 ? -1 :+1; r*=determinant(m, n - 1); swap_y(m, n, i, n-1); swap_x(m, n, j, n-1); return r; } int main(){ number row0[3] = {1,4,7}; number row1[3] = {2,5,8}; number row2[3] = {3,6,9}; number* a[3] = {row0, row1, row2}; printf("%d\n", _minor(a, 3, 0, 1)); return 0; } |