Cod sursa(job #1675145)

Utilizator usermeBogdan Cretu userme Data 5 aprilie 2016 09:33:38
Problema Algoritmul lui Gauss Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.81 kb
//#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdio>
#include <cmath>

using namespace std;

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

const double EPS = 0.000001;

double ec[305][305];

int n, m;

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 (fabs(ec[j][i]) > EPS && !lin[j]) {
                if (rez == -1 || fabs(ec[j][i]) > fabs(ec[rez][i])) {
                    rez = j;
                }
            }
        }
        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];
                for (int k = 1; k <= m + 1; ++k) {
                    ec[j][k] -= ec[rez][k] * factor;
                }
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (fabs(ec[i][m + 1]) > EPS) {
            bool gasit = 0;
            for (int j = 1; j <= m; ++j) {
                if (fabs(ec[i][j]) > EPS) {
                    gasit = 1;
                    break;
                }
            }
            if (!gasit) {
                cout<<"Imposibil\n";
                return 0;
            }
        }
    }
    FILE* h = fopen("gauss.out", "w");
    for (int i = 1; i <= m; ++i) {
        if (used[i] == 0) {
            fprintf(h, "0.0000000000 ");
        } else {
            fprintf(h, "%.10lf ", ec[used[i]][m + 1]);
        }
    }
    cout<<"\n";
    return 0;
}