Pagini recente » Cod sursa (job #2868705) | Cod sursa (job #2260362) | Cod sursa (job #1998361) | Cod sursa (job #1511504) | Cod sursa (job #1468620)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#define INF ( (1 << 30) - 1 + (1 << 30) )
#define mod 666013
#define eps 0.000000000000001
using namespace std;
int n, m, i, j, ii, x;
double v[405], a[405][405];
void schimba(int i1, int i2)
{
for(int j = 1; j <= m + 1; j++)
swap(a[i1][j], a[i2][j]);
}
void imparte(int x, int y)
{
double el = a[x][y];
for(int j = 1; j <= m + 1; j++)
a[x][j] /= el;
}
void scade(int i1, int i2, double inml)
{
for(int j = 1; j <= m + 1; j++)
a[i1][j] -= a[i2][j] * inml;
}
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++)
for(j = 1; j <= m + 1; j++)
{
scanf("%d", &x);
a[i][j] = (double)x;
}
for(i = 1, j = 1; i <= n && j <= m; i++, j++)
{
for(ii = i; ii <= n; ii++)
if( fabs(a[ii][j]) > eps )
break;
if(ii > n)
{
i--;
continue;
}
if(i != ii)
schimba(i, ii);
imparte(i, j);
for(ii = i + 1; ii <= n; ii++)
if( fabs(a[ii][j]) > eps )
scade(ii, i, a[ii][j]);
}
for(i = n; i >= 1; i--)
for(j = 1; j <= m + 1; j++)
if( fabs(a[i][j]) > eps)
{
if(j == m + 1)
{
printf("Imposibil\n");
return 0;
}
x = a[i][m + 1];
for(ii = j + 1; ii <= m; ii++)
x -= a[i][ii] * v[ii];
v[j] = x;
break;
}
for(i = 1; i <= m; i++)
printf("%.8lf ", v[i]);
return 0;
}