Cod sursa(job #1672514)

Utilizator usermeBogdan Cretu userme Data 2 aprilie 2016 20:14:57
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <fstream>
#include <iomanip>

using namespace std;

ifstream cin("gauss.in");
ofstream cout("gauss.out");

double ec[305][305];

int n, m;

void swapL(int a, int b) {
    if (a == b) {
        for (int i = 1; i <= m + 1; ++i) {
            double aux = ec[a][i];
            ec[a][i] = ec[b][i];
            ec[a][i] = aux;
        }
    }
}

int used[305];

bool lin[305];

int main() {
    cin>>n>>m;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m + 1; ++j) {
            cin>>ec[i][j];
        }
    }
    for (int i = 1; i <= m; ++i) {
        int rez = -1;
        for (int j = 1; j <= n; ++j) {
            if (ec[j][i] != 0 && !lin[j]) {
                rez = j;
                break;
            }
        }
        if (rez == -1) {
            continue;
        }
        lin[rez] = 1;
        used[i] = rez;
        double factor = ec[rez][i];
        for (int j = 1; j <= m + 1; ++j) {
            ec[rez][j] /= factor;
        }
        for (int j = 1; j <= n; ++j) {
            if (rez != j) {
                double factor = ec[j][i] / ec[rez][i];
                for (int k = 1; k <= m + 1; ++k) {
                    ec[j][k] -= ec[rez][k] * factor;
                }
            }
        }
    }
    bool corect = 1;
    /*for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m + 1; ++j) {
            cout<<ec[i][j]<<" ";
        }
        cout<<"\n";
    }*/
    if (corect = 0) {
        cout<<"Imposibil\n";
    }
    for (int i = 1; i <= m; ++i) {
        if (used[i] == 0) {
            cout<<setprecision(10)<<0<<" ";
        } else {
            cout<<setprecision(10)<<ec[used[i]][m + 1]<<" ";
        }
    }
    cout<<"\n";
    return 0;
}