Cod sursa(job #794685)
#include <fstream>
#include <iomanip>
#define EPS 0.0000001
using namespace std;
int n, m, i, j, k, q, l, u;
double A[310][310];
double X[310], tmp;
int main()
{
ifstream f("gauss.in");
ofstream g("gauss.out");
f >> n >> m;
for ( i = 1; i <= n; ++i)
{
for ( j = 1; j <= m+1; ++j)
{
f >> A[i][j];
}
}
i = 1, j = 1;
while ( i <= n && j <= m)
{
for ( k = i; k <= n; ++k)
{
if(A[k][j] < - EPS || A[k][j] > EPS)
break;
}
if ( k == n+1)
{
++j;
continue;
}
if ( k != i)
{
for ( l = 1; l <= m+1; l++)
{
tmp = A[i][l];
A[i][l] = A[k][l];
A[k][l] = tmp;
}
}
for ( q = j+1; q <= m+1; ++q)
A[i][q] = A[i][q] / A[i][j];
A[i][j] = 1;
for(int u = i+1; u <= n; ++u)
{
for(int l = j+1; l <= m+1; ++l)
A[u][l] -= A[u][j] * A[i][l];
A[u][j] = 0;
}
i++;
j++;
}
for ( i = n; i > 0; i--)
{
for ( j = 1; j <= m+1; j++)
{
if(A[i][j] < - EPS || A[i][j] > EPS)
{
if(j == m+1)
{
g << "Imposibil\n";
g.close();
return 0;
}
X[j] = A[i][m+1];
for ( k = j+1; k <= m; k++)
{
X[j] -= X[k] * A[i][k];
}
break;
}
}
}
g << fixed << setprecision(8);
for ( i = 1; i <= m; i++)
g << X[i] << ' ';
g << '\n';
f.close();
g.close();
return 0;
}