Cod sursa(job #973853)

Utilizator mitrutstrutMitrea Andrei Ionut mitrutstrut Data 15 iulie 2013 19:33:43
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>
#include <queue>
#include <deque>
#include <list>
#include <set>
#include <ctime>
#include <string>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream ff("gauss.in");
ofstream gg("gauss.out");
#define max 303
#define eps 1e-6
 
int n, m;
double zz[max][max], ss[max];
 
void gau(){
    int i=1, j=1, k;
    while(i<=n && j<=m){
        for(k=i;k<=n;k++)
            if(zz[k][j]>eps || zz[k][j]<-eps) break;
        if(k==n+1){ j++; continue; }
        if(k!=i)
            for(int l=j;l<=m+1;l++) swap(zz[i][l], zz[k][l]);
         
        for(int l=j+1;l<=m+1;l++)
            zz[i][l] /= zz[i][j];  
        zz[i][j]=1;
         
        for(int k=i+1;k<=n;k++){
            for(int l=j+1;l<=m+1;l++)
                zz[k][l] -= zz[k][j] * zz[i][l];
            zz[k][j]=0;
        }
            i++; j++;
        }
    for(i=n;i>0;i--){
        for(j=1;j<=m+1;j++)
        if(zz[i][j]>eps || zz[i][j]<-eps){
            if(j==m+1){
                gg << "Imposibil\n";
                return;
            }
            ss[j]=zz[i][m+1];
            for(int k=j+1;k<=m;k++)
                ss[j] -= ss[k] * zz[i][k];
            break;
        }
    }
    gg << setprecision(12) << fixed;
    for(int i=1;i<=m;i++) gg << ss[i] << " ";
}  
 
int main(){
    ff >> n >> m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m+1;j++) ff >> zz[i][j];
    gau();
}