Cod sursa(job #1472278)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 16 august 2015 20:29:28
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX = 303;
int n, m, lib[MAX];
double mat[MAX][MAX], eps = 0.000001, sol[MAX], cop[MAX][MAX];
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", &mat[i][j]);
            cop[i][j] = mat[i][j];
        }
    int lin = 1;
    for(int j=1; j<=m; j++){
        int cur = lin;
        for(int i=cur; i<=n; i++)
            if(fabs(mat[i][j])>fabs(mat[cur][j]))
                cur = i;
        if(fabs(mat[cur][j])>eps){
            for(int i=j; i<=m+1; i++)
                swap(mat[lin][i], mat[cur][i]);
            for(int i=m+1; i>=j; i--)
                mat[lin][i] = mat[lin][i]/mat[lin][j];
            for(int i=lin+1; i<=n; i++)
                for(int k=m+1; k>=j; k--)
                    mat[i][k] = mat[i][k] - mat[lin][k]*mat[i][j];
            lib[j] = lin;
            lin++;
        }
        if(lin>n) break;
    }
    for(int j=m; j>=1; j--)
        if(lib[j]!=0){
            sol[j] = mat[lib[j]][m+1];
            for(int i = j+1; i<=m; i++)
                sol[j] -= sol[i]*mat[lib[j]][i];
        }

    for(int i=1; i<=n; i++){
        double ans = cop[i][m+1];
        for(int j=1; j<=m; j++)
            ans -= sol[j]*cop[i][j];
        if(fabs(ans)>eps){
            printf("Imposibil\n");
            return 0;
        }
    }
    for(int i=1; i<=m; i++)
        printf("%.8f ", sol[i]);
    return 0;
}