Cod sursa(job #1249375)

Utilizator george_stelianChichirim George george_stelian Data 26 octombrie 2014 22:01:45
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

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

int main()
{
    freopen("gauss.in", "r", stdin);
    freopen("gauss.out", "w", stdout);
    int n,m;
    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]);
    int i=1,j=1,q;
    while(i<=n && j<=m)
    {
        for(q=i;q<=n;q++) if(abs(v[q][j])>eps) break;
        if(q==n+1) {j++;continue;}
        if(q>i) for(int k=1;k<=m+1;k++) swap(v[i][k],v[q][k]);
        for(q=j+1;q<=m+1;q++) v[i][q]/=v[i][j];
        v[i][j]=1;
        for(q=i+1;q<=n;q++)
        {
            for(int k=j+1;k<=m+1;k++) v[q][k]-=v[i][k]*v[q][j];
            v[q][j]=0;
        }
        i++;j++;
    }
    for(i=n;i;i--)
        for(j=1;j<=m+1;j++)
            if(abs(v[i][j])>eps)
            {
                if(j==m+1)
                {
                    printf("Imposibil");
                    return 0;
                }
                sol[j]=v[i][m+1];
                for(int q=j+1;q<=m;q++) sol[j]-=v[i][q]*sol[q];
                break;
            }
    for(i=1;i<=m;i++) printf("%.8lf ",sol[i]);
    return 0;
}