Cod sursa(job #1644236)

Utilizator touristGennady Korotkevich tourist Data 9 martie 2016 22:08:48
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define Nmax 305
#define eps 0.00000001

using namespace std;

int n,m,Solved[Nmax];
double Sol[Nmax],a[Nmax][Nmax];

inline void SwapL(int l1, int l2)
{
    if(l1==l2) return;
    for(int i=1;i<=m+1;++i) swap(a[l1][i],a[l2][i]);
}

int main()
{
    int i,j,k,t;
    ifstream cin("gauss.in");
    ofstream cout("gauss.out");
    cin>>n>>m;
    for(i=1;i<=n;++i)
        for(j=1;j<=m+1;++j) cin>>a[i][j];
    i=j=1;
    while(i<=n && j<=m)
    {
        for(k=i;k<=n && fabs(a[k][j])<=eps;++k);
        if(k>n)
        {
            ++j; continue;
        }
        SwapL(i,k);
        for(k=1;k<=n;++k)
        {
            if(k==i) continue;
            double coef=-a[k][j]/a[i][j];
            for(t=1;t<=m+1;++t) a[k][t]+=a[i][t]*coef;
        }
        Solved[i]=j;
        ++i; ++j;
    }

    for(i=1;i<=n;++i)
    {
        for(j=1;j<=m+1 && fabs(a[i][j])<=eps;++j);
        if(j==m+1)
        {
            cout<<"Imposibil\n";
            return 0;
        }
        Sol[Solved[i]]=a[i][m+1]/a[i][Solved[i]];
    }
    cout<<setprecision(10)<<fixed;
    for(i=1;i<=m;++i) cout<<Sol[i]<<" ";
    cout<<"\n";
    return 0;
}