Cod sursa(job #1154956)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 26 martie 2014 15:24:06
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>

using namespace std;
int n,m,i,j,k,p,ec[302];
double A[302][302],*a[302],*aux,eps=0.000000001;
int main()
{
    freopen("gauss.in","r",stdin);
    freopen("gauss.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        a[i]=A[i];
        for(j=1;j<=m+1;j++)scanf("%lf",&a[i][j]);
    }
    k=1;
    for(j=1;j<=m;j++)
    {
        for(i=k;i<=n;i++)
            if(a[i][j]<-eps||a[i][j]>eps)
                break;
        if(i>n)continue;
        if(i>k){aux=a[i];a[i]=a[k];a[k]=aux;}
        for(i=1;i<=n;i++)
            if(i!=k && (a[i][j]<-eps||a[i][j]>eps))
            {
                double fact=a[i][j]/a[k][j];
                for(p=j;p<=m+1;p++)
                    a[i][p]-=fact*a[k][p];
            }

        ec[j]=k;//a[k][m+1]/=a[k][j];
        k++;
    }
    for(i=k;i<=n;i++)
        if(a[i][m+1]<-eps||a[i][m+1]>eps)
        {
            printf("Imposibil");
            return 0;
        }
    for(j=1;j<=m;j++)
    {
        double sol=ec[j]?a[ec[j]][m+1]/a[ec[j]][j]:0.0;
        printf("%.10lf ",sol);
    }

    return 0;
}