Cod sursa(job #1451971)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 19 iunie 2015 12:43:08
Problema Algoritmul lui Gauss Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#define DIM 309

using namespace std ;

int p[DIM], N, M;
double sol[DIM], A[DIM][DIM];
const double eps = 1e-8;

double abs(double x){
    if(x<0)
        return -x;
    return x;
}

int main(){

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

    scanf("%d%d", &N, &M);

    for(int i=1;i<=N;i++)
        for(int j=1;j<=M+1;j++)
            scanf("%lf", &A[i][j]);

    for(int i=1;i<=N;i++){

        p[i]=0;

        for(int j=1;j<=M+1;j++)
            if(abs(A[i][j])>eps){
                p[i]=j;
                break;
            }

        if(p[i]==M+1){
            printf("Imposibil\n");
            return 0;
        }

        if(p[i]==0)
            continue;

        for(int j=1;j<=N;j++)
            if(j != i && abs(A[j][p[i]]) > eps){
                double rap = (double)A[j][p[i]] / A[i][p[i]];
                for(int k=1;k<=M+1;k++)
                    A[j][k] = (double) A[j][k] - A[i][k] * rap;
            }
    }

    for(int i=1;i<=N;i++)
        if(p[i])
            sol[p[i]] = (double) A[i][N+1] / A[i][p[i]];

    for(int i=1;i<=N;i++)
        printf("%.10lf ", sol[i]);

    printf("\n");

    return 0;
}