intgauss(){ int c, r; for (c = r = 0; c < n; ++c) { // 枚举列 int t = r; for (int i = r; i < n; ++i) // 找到绝对值最大的行 if (fabs(a[i][c]) > fabs(a[t][c])) t = i;
if (fabs(a[t][c]) < eps) continue; // 最大为 0,跳过 for (int i = c; i <= n; ++i) std::swap(a[t][i], a[r][i]);
// 将第一个数置为 0 for (int i = n; i >= c; --i) a[r][i] /= a[r][c];
// 将 a[i][c](第一个数) 置为 0 for (int i = r + 1; i < n; ++i) if (fabs(a[i][c]) > eps) for (int j = n; j >= c; --j) a[i][j] -= a[i][c] * a[r][j]; ++r; }
if (r < n) { for (int i = r; i < n; ++i) if (fabs(a[i][n]) > eps) return2; // 无解 return1; // 有无穷多组解 }
for (int i = n - 1; i >= 0; --i) // 正在求 x_i for (int j = i + 1; j < n; ++j) a[i][n] -= a[i][j] * a[j][n];