Cod sursa(job #1847007)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 14 ianuarie 2017 11:09:51
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
# include <bits/stdc++.h>

using namespace std;

const int Nmax = 300 + 5;
double eps = 0.00000001;

double a[Nmax][Nmax], ans[Nmax];
int i, j, n, m, k, p[Nmax];

bool zero(double x) {
    if (x > -eps && x < eps) return true;
    return false;
}

int main ()
{
    freopen("gauss.in", "r", stdin);
    freopen("gauss.out", "w", stdout);

    scanf("%d %d\n", &n, &m);

    for (i = 1; i <= n; ++i)
        for (j = 1; j <= m + 1; ++j)
            scanf("%lf ", &a[i][j]);


    for (i = 1; i <= n; ++i)
    {
        for (j = 1; j <= m + 1 && zero(a[i][j]); ++j);

        if (j == m + 1)
        {
            printf("Imposibil\n");
            return 0;
        }

        p[i] = j;

        for (j = 1; j <= n; ++j) {
            if (i == j) continue;
            double x = a[j][p[i]] / a[i][p[i]];
            for (k = 1; k <= m + 1; ++k)
                a[j][k] -= x * a[i][k];
        }
    }

    for (i = 1; i <= n; ++i)
        if (p[i]) ans[p[i]] = a[i][m + 1] / a[i][p[i]];

    for (i = 1; i <= m; ++i)
        printf("%.10f ", ans[i]);

    printf("\n");

    return 0;
}