Cod sursa(job #1741153)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 13 august 2016 01:43:52
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in ( "gauss.in"  );
ofstream out( "gauss.out" );

const int DIM = 3e2 + 5;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-5;

int N, M;
double A[DIM][DIM], X[DIM];

int main( int argc, const char *argv[] ) {

    in >> N >> M;
    for( int i = 1; i <= N + 0; i ++ )
    for( int j = 1; j <= M + 1; j ++ )
        in >> A[i][j];

    for( int i = 1, j = 1, ok = 0; i <= N && j <= M; ok = 0 ) {

        for( int k = i; k <= N; k ++ ) {
            if( fabs( A[k][j] ) > EPS ) {
                for( int p = 1; p <= M + 1; p ++ )
                    swap( A[i][p], A[k][p] );
                ok = 1;
                break;
            }
        }

        if( ok == 0 ) {
            j ++;
            continue;
        }

        for( int k = M + 1; k >= j; k -- )
            A[i][k] /= A[i][j];

        for( int k = i + 1; k <= N; k ++ ) {
            for( int p = M + 1; p >= j; p -- )
                A[k][p] -= A[k][j] * A[i][p];
        }

        i ++, j ++;
    }

    for( int i = N; i >= 1; i -- ) {
    for( int j = 1; j <= M + 1; j ++ ) {
        if( fabs( A[i][j] ) > EPS ) {
            if( j == M + 1 ) {
                out << "Imposibil\n";
                return 0;
            }

            X[j] = A[i][M + 1];
            for( int k = M; k > j; k -- )
                X[j] -= X[k] * A[i][k];

            break;
        }
    }}

    for( int i = 1; i <= M; i ++ )
        out << setprecision( 10 ) << fixed << X[i] << " ";
    out << '\n';

    return 0;
}