Pagini recente » Cod sursa (job #1643576) | Cod sursa (job #1351915) | Cod sursa (job #90781) | Cod sursa (job #2701223) | Cod sursa (job #1959749)
#include <bits/stdc++.h>
#define MAXN 302
using namespace std;
int n, m;
double gauss[MAXN][MAXN], answer[MAXN];
inline void divide(int row, double cf) {
for(int j = 1; j <= m+1; ++j)
gauss[row][j] /= cf;
}
inline void substract(int row1, int row2, double cf) {
for(int j = 1; j <= m+1; ++j)
gauss[row1][j] = gauss[row1][j] - gauss[row2][j] * cf;
}
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
int i, j, k;
scanf("%d%d", &n, &m);
for(i=1; i<=n; ++i)
for(j=1; j<=m+1; ++j)
scanf("%lf", &gauss[i][j]);
i = j = 1;
while(i <= n && j <= m) {
if(gauss[i][j] == 0) {
k = i + 1;
while(k <= n && !gauss[i][j])
k++;
if(k > n) {
j++;
continue;
}
swap(gauss[i], gauss[k]);
}
divide(i, gauss[i][j]);
for(k = i+1; k<=n; ++k)
if(gauss[k][j])
substract(k, i, gauss[k][j]);
i++; j++;
}
for(i=n; i>0; --i)
for(j=1; j<=m+1; ++j)
if(gauss[i][j] != 0) {
if(j == m + 1) {
printf("Imposibil\n");
return 0;
}
answer[j] = gauss[i][m+1];
for(k=j+1; k<=m; ++k)
answer[j] -= answer[k] * gauss[i][k];
break;
}
for(i=1; i<=m; ++i)
printf("%.10lf ", answer[i]);
return 0;
}