Cod sursa(job #1075785)

Utilizator misinozzz zzz misino Data 9 ianuarie 2014 16:11:46
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<iomanip>
#define N 330
#define eps 0.0000001
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
int n,m,i,j,k,p,l;
double x[N],a[N][N];
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("%lf",&a[i][j]);
    }
    for(i=1,j=1;i<=n&&j<=m;++i,++j)
    {
        for(k=i;k<=m;++k)
        if(a[k][j]<-eps||a[k][j]>eps)
        {
            break;
        }
        if(k>m)
        {
            --i;
            continue;
        }
        if(k!=i)
        for(p=1;p<=m+1;++p)
        swap(a[i][p],a[k][p]);
        for(p=j+1;p<=m+1;++p)
        a[i][p]/=a[i][j];
        a[i][j]=1;
        for(l=i+1;l<=n;++l)
        {
            for(p=j+1;p<=m+1;++p)
            a[l][p]-=a[l][j]*a[i][p];
            a[l][j]=0;
        }
    }
    for(i=n;i;--i)
    for(j=1;j<=m+1;++j)
    if(a[i][j]<-eps||a[i][j]>eps)
    {
        if(j==m+1)
        {
            printf("Imposibil\n");
            return 0;
        }
        x[j]=a[i][m+1];
        for(k=j+1;k<=m;++k)
        x[j]-=x[k]*a[i][k];
        break;
    }
    for(i=1;i<=m;++i)
    printf("%.8lf ",x[i]);
    return 0;
}