Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int solve(vector<vector<ldouble>> &A, vector<ldouble> &ans) {
- int rows = A.size();
- int cols = A[0].size() - 1;
- int row = 0;
- vector<int> where(cols, -1);
- for (int col = 0; col < cols; col++) {
- int chosen = row;
- for (int i = row + 1; i < rows; i++)
- if (fabsl(A[i][col]) > fabsl(A[chosen][col]))
- chosen = i;
- if (!sign(A[chosen][col])) continue;
- where[col] = row;
- A[row].swap(A[chosen]);
- for (int i = 0; i < rows; i++)
- if (i != row) {
- ldouble factor = A[i][col] / A[row][col];
- for (int j = col; j <= cols; j++)
- A[i][j] -= A[row][j] * factor;
- }
- row++;
- }
- bool freedom = false;
- ans.assign(cols, 0.0L);
- for (int i = 0; i < cols; i++) {
- if (where[i] == -1) freedom = true;
- else ans[i] = A[where[i]][cols] / A[where[i]][i];
- }
- for (int i = 0; i < rows; i++) {
- ldouble sum = 0.0L;
- for (int j = 0; j < cols; j++)
- sum += ans[j] * A[i][j];
- if (sign(sum - A[i][cols]))
- return 0;
- }
- return freedom ? INF : 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement