Cod sursa(job #1588907)

Utilizator touristGennady Korotkevich tourist Data 3 februarie 2016 18:24:27
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define Nmax 305

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 && !a[k][j];++k);
        if(k==n+1)
        {
            ++j; continue;
        }
        SwapL(k,i);
        solved[i]=j;
        for(k=1;k<=n;++k)
        {
            if(k==i) continue;
            double rap=-(a[k][j]/a[i][j]);
            for(t=1;t<=m+1;++t) a[k][t]+=rap*a[i][t];
        }
        ++i; ++j;
    }

    if(j<=m)
    {
        cout<<"Imposibil\n"; return 0;
    }

    for(i=1;i<=n;++i)
    {
        if(!solved[i]) continue;
        Sol[solved[i]] = (a[i][m+1] / a[i][solved[i]]);
    }

    cout<<setprecision(10)<<fixed;
    for(k=1;k<=m;++k) cout<<Sol[k]<<" ";
    return 0;
}