Cod sursa(job #1518089)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 5 noiembrie 2015 14:49:47
Problema Algoritmul lui Gauss Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

#define INF (1 << 30)
#define LLINF (1LL << 62)
#define mod 666013
#define eps 0.000000001

using namespace std;

int n, m, i, j, k;
int p[305];
double rap;
double sol[305];
double a[305][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]);

    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= m + 1; j++)
            if( fabs(a[i][j]) > eps )
                break;

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

        if(j > m)
            continue;

        p[i] = j;
        for(j = 1; j <= n; j++)
        {
            if(j == i || a[j][ p[i] ] == 0)
                continue;

            rap = a[j][ p[i] ] / a[i][ p[i] ];
            for(k = 1; k <= m + 1; k++)
                a[j][k] = a[j][k] - a[i][k] * rap;
        }
    }

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

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

    return 0;
}