Cod sursa(job #617008)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 13 octombrie 2011 20:12:56
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#define NMAX 305
#define eps 0.00001
int n,m;
double A[NMAX][NMAX],B[NMAX];
void read()
{
	scanf("%d%d",&n,&m);
	int i,j;
	for (i=1; i<=n; i++)
		for (j=1; j<=m+1; j++)
			scanf("%lf",&A[i][j]);
}
void swap_l(int x,int y)
{
	int i;
	double aux;
	for (i=1; i<=m+1; i++)
		aux=A[x][i],A[x][i]=A[y][i],A[y][i]=aux;
}
void solve()
{
	int i=1,j=1,k,t;
	double val;
	while (i<=n && j<=m)
	{
		for (k=i; k<=n; k++)
			if (A[k][j]<-eps || A[k][j]>eps)
				break ;
		if (k==m+1)
		{
			j++;
			continue ;
		}
		swap_l(i,k);
		for (k=j+1; k<=m+1; k++)
			A[i][k]/=A[i][j];
		A[i][j]=1;
		for (k=i+1; k<=n; k++)
		{
			for (t=j+1; t<=m+1; t++)
				A[k][t]-=A[k][j]*A[i][t];
			A[k][j]=0;
		}
		i++; j++;
	}
	for (i=n; i>=1; i--)
		for (j=1; j<=m+1; j++)
			if (A[i][j]<-eps || A[i][j]>eps)
			{
				if (j==m+1)
				{
					printf("Imposibil\n");
					return ;
				}
				B[j]=A[i][m+1];
				for (k=m; k>j; k--)
					B[j]-=B[k]*A[i][k];
				break ;
			}
	
	for (i=1; i<=m; i++)
		printf("%.8lf ",B[i]);
	printf("\n");
}
int main()
{
	freopen("gauss.in","r",stdin);
	freopen("gauss.out","w",stdout);
	read();
	solve();
	return 0;
}