Cod sursa(job #1649504)

Utilizator george_stelianChichirim George george_stelian Data 11 martie 2016 13:55:07
Problema Algoritmul lui Gauss Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const double eps=0.00000001;
double v[310][310],sol[310];
int n,m;

int gauss()
{
    int i=1,j=1;
    while(i<=n && j<=m)
    {
        int q;
        for(q=i;q<=n && abs(v[q][j])<eps;q++);
        if(q==n+1) {j++;continue;}
        swap(v[i],v[q]);
        for(int q=i+1;q<=n;q++)
        {
            for(int k=j+1;k<=m+1;k++) v[q][k]-=(v[q][j]*v[i][k])/v[i][j];
            v[q][j]=0;
        }
        i++;j++;
    }
    for(int i=n;i;i--)
    {
        int j;
        for(j=1;j<=m+1 && abs(v[i][j])<eps;j++);
        if(j==m+1) return 0;
        sol[j]=v[i][m+1];
        for(int q=j+1;q<=m;q++) sol[j]-=sol[q]*v[i][q];
        sol[j]/=v[i][j];
    }
    return 1;
}

int main()
{
    freopen("gauss.in", "r", stdin);
    freopen("gauss.out", "w", stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m+1;j++) scanf("%lf",&v[i][j]);
    if(!gauss()) printf("Imposibil");
    else for(int i=1;i<=m;i++) printf("%f ",sol[i]);
    return 0;
}