Cod sursa(job #1536992)

Utilizator 2chainzTauheed Epps 2chainz Data 26 noiembrie 2015 20:29:44
Problema Algoritmul lui Gauss Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<fstream>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
const int Nmax = 302;
double a[Nmax][Nmax],ans[Nmax];
int N,M,v[Nmax];
int main(){
    in>>N>>M;
    for(int i=1;i<=N;i++) for(int j=1;j<=M+1;j++) in>>a[i][j];
    int i=1,j=1;
    while(i<=N && j<=M){
        int f=0;
        for(int k=i;k<=N;k++) if(a[k][j]) f=k;
        if(!f) j++;
        else{
            for(int k=1;k<=M+1;k++) swap(a[i][k],a[f][k]);
            v[i]=j;
            double c=a[i][j];
            for(int jk=j;jk<=M+1;jk++) a[i][jk]/=c;
            for(int ik=i+1;ik<=N;ik++){
                if(a[ik][j]){
                    c=a[ik][j];
                    for(int jk=j;jk<=M+1;jk++) a[ik][jk]=a[ik][jk]/c - a[i][jk];
                }
            }
            i++,j++;
        }
    }
    int I=i-1,J;
    while(i<=N){
        if(a[i][M+1]){
            out<<"Imposibil\n";
            return 0;
        }
        i++;
    }
    while(I){
        J=v[I];
        for(j=J+1;j<=M;j++) a[I][M+1]-=ans[j]*a[I][j];
        ans[J]=a[I][M+1];
        I--;
    }
    out.precision(11);
    for(int i=1;i<=M;i++) out<<fixed<<ans[i]<<' ';
    out<<'\n';
    return 0;
}