Advertisement
Infernale

Get Solution [NCTU Floor 19]

Dec 25th, 2019
498
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. vector<double> solve(vector <vector<double>> M){
  7.     int n = M.size();
  8.     for(int i = 0; i < n; i++){
  9.         double max = abs(M[i][i]);
  10.         int maxRow = i;
  11.         for(int k = i + 1; k < n; k++){
  12.             if(abs(M[k][i]) > max){
  13.                 max = abs(M[k][i]);
  14.                 maxRow = k;
  15.             }
  16.         }
  17.         for(int k = i; k < n + 1; k++){
  18.             double tmp = M[maxRow][k];
  19.             M[maxRow][k] = M[i][k];
  20.             M[i][k] = tmp;
  21.         }
  22.         for(int k = i + 1; k < n; k++){
  23.             double c = -M[k][i] / M[i][i];
  24.             for(int j = i; j < n + 1; j++){
  25.                 if(i == j)
  26.                     M[k][j] = 0;
  27.                 else
  28.                     M[k][j] += c * M[i][j];
  29.             }
  30.         }
  31.     }
  32.     vector<double> x(n);
  33.     for(int i = n - 1; i >= 0; i--){
  34.         x[i] = M[i][n] / M[i][i];
  35.         for(int k = i - 1; k >= 0; k--){
  36.             M[k][n] -= M[k][i] * x[i];
  37.         }
  38.     }
  39.     return x;
  40. }
  41.  
  42. int main(){
  43.     int n;
  44.     cin >> n;
  45.  
  46.     vector <vector<double>> M(n, vector<double>(n+1));
  47.  
  48.     for(int i = 0; i < n; i++)
  49.         for(int j = 0; j < n; j++)
  50.             cin >> M[i][j];
  51.  
  52.     for(int i = 0; i < n; i++)
  53.         cin >> M[i][n];
  54.  
  55.     vector<double> x(n);
  56.     x = solve(M);
  57.  
  58.     for(int i = 0; i < n; i++)
  59.         cout << fixed << setprecision(2) << x[i] << " ";
  60.     cout << endl;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement