/*
Name:Sheikh Md. Showrov Uddin Zishan
Id: 230241003
Report: Gauss Elimination
*/
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;
void gaussElimination() {
int n;
cout << "Enter the order of square matrix: ";
cin >> n;
vector<vector<double>> A(n, vector<double>(n + 1));
vector<double> x(n);
cout << "Enter the elements of augmented matrix row-wise:\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j <= n; j++) {
cin >> A[i][j];
}
}
for (int j = 0; j < n; j++) {
// Partial Pivoting
int maxRow = j;
for (int i = j + 1; i < n; i++) {
if (fabs(A[i][j]) > fabs(A[maxRow][j])) {
maxRow = i;
}
}
if (A[maxRow][j] == 0) {
cout << "No unique solution exists (singular matrix)." << endl;
return;
}
if (maxRow != j) {
swap(A[j], A[maxRow]);
}
// Eliminate
for (int i = j + 1; i < n; i++) {
double factor = A[i][j] / A[j][j];
for (int k = j; k <= n; k++) {
A[i][k] -= factor * A[j][k];
}
}
}
for (int i = n - 1; i >= 0; i--) {
x[i] = A[i][n];
for (int j = i + 1; j < n; j++) {
x[i] -= A[i][j] * x[j];
}
if (A[i][i] == 0) {
cout << "No unique solution exists (zero diagonal element)." << endl;
return;
}
x[i] /= A[i][i];
}
cout << "\nThe solution is:\n";
for (int i = 0; i < n; i++) {
cout << "x" << i + 1 << " = " << fixed << setprecision(6) << x[i] << endl;
}
}
int main() {
gaussElimination();
return 0;
}