高斯消元求行列式
cpp
double det() {
double ans = 1.0;
for (int i = 0; i < n; i++) {
// 列主元选择
int k = i;
for (int j = i+1; j < n; j++)
if (fabs(a[j][i]) > fabs(a[k][i])) k = j;
if (k != i) swap(i, k), ans *= -1; // 行交换符号取反
if (a[i][i] == 0) return 0; // 行列式为0
// 消元操作
for (int j = i+1; j < n; j++) {
double factor = a[j][i] / a[i][i];
for (int k = i; k < n; k++)
a[j][k] -= factor * a[i][k];
}
ans *= a[i][i]; // 累积对角线元素
}
return ans;
}