Cod sursa(job #759219)

Utilizator Marius96Marius Gavrilescu Marius96 Data 17 iunie 2012 10:50:23
Problema Algoritmul lui Gauss Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<cstdio>
double v[305][305];
double r[305];

int main()
{
	freopen ("gauss.in","r",stdin);
	freopen ("gauss.out","w",stdout);
	int n,m;
	scanf ("%d%d",&n,&m);
	for(int i=0;i<n;i++)
		for(int j=0;j<=m;j++)
			scanf ("%lf",v[i]+j);

	int i=0,j=0;
	while(i<n&&j<m){
		for(int x=i;x<n;x++)
			if(v[x][j]){
				for(int y=0;y<=m;y++){
					double t=v[x][y];
					v[x][y]=v[i][y];
					v[i][y]=t;
				}
				double val=v[i][j];
				for(int y=0;y<=m;y++)
					v[i][y]/=val;
				for(int u=i+1;u<n;u++){
					val=v[u][j];
					for(int y=0;y<=m;y++)
						v[u][y]-=v[i][y]*val;
				}
				i++;
				break;
			}
		j++;
	}

	for(int i=n-1;i>=0;i--){
		int p;
		for(p=0;p<=m;p++)
			if(v[i][p])
				break;
		if(p==m){
			printf ("Imposibil");
			return 0;
		} else if (p>m)
			continue; //???
		r[p]=v[i][m];
		for(int j=m-1;j>p;j--)
			r[p]-=v[i][j]*r[j];
	}

	/*
	for(int i=0;i<n;i++){
		for(int j=0;j<=m;j++)
			fprintf (stderr,"%.10lf ",v[i][j]);
		fprintf (stderr,"\n");
	}
	*/

	for(int i=0;i<m;i++)
		printf ("%.10f ",r[i]);
}