Cod sursa(job #2340318)
| Utilizator | Data | 10 februarie 2019 11:32:51 | |
|---|---|---|---|
| Problema | Algoritmul lui Gauss | Scor | 90 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 2.6 kb |
#include <bits/stdc++.h>
using namespace std;
const int N = 300 + 7;
int n, m;
double gauss[N][N];
double res[N];
void Reduce() {
int i = 1;
int j = 1;
while (i <= n && j <= m) {
///cout << "# " << i << " , " << j << "\n";
int k = 0;
for (k = i; k <= n; k++) {
if (gauss[k][j] != 0) {
break;
}
}
if (k > n) {
j++;
} else {
if (k != i) {
for (int l = 1; l <= m + 1; l++) {
swap(gauss[i][l], gauss[k][l]);
}
}
double value = gauss[i][j];
for (int l = j; l <= m + 1; l++) {
gauss[i][l] /= value;
}
for (int u = i + 1; u <= n; u++) {
double value = gauss[u][j];
for (int l = 1; l <= m + 1; l++) {
gauss[u][l] -= value * gauss[i][l];
}
}
i++;
j++;
}
}
}
void FindSolution() {
Reduce();
for (int equation = n; equation >= 1; equation--) {
for (int j = 1; j <= m + 1; j++) {
if (gauss[equation][j] != 0) {
if (j == m + 1) {
cout << "Imposibil\n";
return;
}
res[j] = gauss[equation][m + 1];
for (int l = j + 1; l <= m; l++) {
res[j] -= res[l] * gauss[equation][l];
}
break;
}
}
}
for (int j = 1; j <= m; j++) {
cout << fixed << setprecision(10) << res[j] << " ";
}
cout << "\n";
}
int main() {
freopen ("gauss.in", "r", stdin);
freopen ("gauss.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m + 1; j++) {
cin >> gauss[i][j];
}
}
FindSolution();
}
