Cod sursa(job #608707)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 17 august 2011 18:22:19
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
using namespace std;

const int maxn=305;
const double EPS=0.000001;
int i,j,x,k,u,N,M;
double A[maxn][maxn],aux[maxn],X[maxn];

int main() {
	freopen("gauss.in","r",stdin);
	freopen("gauss.out","w",stdout);
	
	scanf("%d %d",&N,&M);
	for(i=1;i<=N;i++)
		for(j=1;j<=M+1;j++)
			scanf("%lf",&A[i][j]);
	i=1; j=1;
	while(i<=N && j<=M) {
		for(x=i;x<=N && A[x][j]>-EPS && A[x][j]<EPS;x++);
		if(x<=N) {
			if(x!=i) {
				double aux;
				for(k=1;k<=M+1;k++) {
					aux=A[i][k];
					A[i][k]=A[x][k];
					A[x][k]=aux;
				}
			}
			for(k=j+1;k<=M+1;k++) 
				A[i][k]=A[i][k]/A[i][j];
			A[i][j]=1;
			
			for(u=i+1;u<=N;u++) {
				for(k=j+1;k<=M+1;k++)
					A[u][k]-=A[i][k]*A[u][j];
				A[u][j]=0;
			}
			i++;
		}
		j++;
	}
	
	for(i=N;i;i--) 
		for(j=1;j<=M+1;j++) 
			if(A[i][j]>EPS || A[i][j]<-EPS) {
				if(j==M+1) {
					printf("Imposibil");
					return 0;
				}
				
				X[i]=A[i][M+1];
				for(k=j+1;k<=M;k++) X[i]-=A[i][k]*X[k];
				break;
			}
	for(i=1;i<=M;i++)
		printf("%.8lf ",X[i]);
}