1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| int gauss() { 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; for (int i = c; i <= n; ++i) std::swap(a[t][i], a[r][i]);
for (int i = n; i >= c; --i) a[r][i] /= a[r][c];
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) return 2; return 1; }
for (int i = n - 1; i >= 0; --i) for (int j = i + 1; j < n; ++j) a[i][n] -= a[i][j] * a[j][n];
return 0; }
|