Cod sursa(job #1462762)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 18 iulie 2015 21:52:40
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <iomanip>
#include <cmath>
#define Nmax 305
#define eps 0.00000001

using namespace std;

double a[Nmax][Nmax],Sol[Nmax];
int n,m,nr[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;
    double rap;
    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+1)
        {
            ++j; continue;
        }
        SwapL(i,k);
        for(k=1;k<=n;++k)
        {
            if(k==i) continue;
            rap=-(a[k][j]/a[i][j]);
            for(int col=1;col<=m+1;++col) a[k][col]+=rap*a[i][col];
        }
        nr[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;
        }
        if(nr[i]) Sol[nr[i]]=a[i][m+1]/a[i][nr[i]];
    }
    cout<<setprecision(10)<<fixed;
    for(i=1;i<=m;++i) cout<<Sol[i]<<" ";
    cout<<"\n";
    return 0;
}