Cod sursa(job #1412274)

Utilizator 4ONI2015oni2015 4ONI2015 Data 1 aprilie 2015 11:04:58
Problema Algoritmul lui Gauss Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define eps 0.00000000001

using namespace std;
double a[305][305], fact;
int n, m, i, j, l, k, ec[305];
int main()
{
    freopen("gauss.in", "r", stdin);
    freopen("gauss.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m + 1; j++)
            scanf("%lf", &a[i][j]);
    k = 1;
    for(j = 1; j <= m; j++)
    {
        for(i = k; i <= n; i++)
            if(a[i][j] < -eps || a[i][j] > eps)
                break;
        if(i > n)
            continue;
        if(i > k)
            for(l = 1; l <= m; l++)
                swap(a[i][l], a[k][l]);
        for(i = 1; i <= n; i++)
        {
            if(i != k && (a[i][k] < -eps || a[i][k] > eps))
            {
                fact = a[i][j] / a[k][j];
                for(l = j; l <= m + 1; l++)
                    a[i][l] -= fact * a[k][l];
            }
        }
        ec[j] = k++;
    }
    for(j = k; j <= n; j++)
        if(a[j][m + 1] < -eps || a[j][m + 1] > eps)
        {
            printf("Imposibil");
            return 0;
        }
    for(j = 1; j <= m; j++)
        printf("%.10lf ", ec[j] ? a[ec[j]][m + 1] / a[ec[j]][j] : 0.0);
    return 0;
}