Cod sursa(job #969235)

Utilizator dropsdrop source drops Data 3 iulie 2013 20:51:19
Problema Algoritmul lui Gauss Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 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-12

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[i][j]>eps || zz[i][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]); // l=1?
		
		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();
}