Cod sursa(job #821185)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 21 noiembrie 2012 20:38:50
Problema Algoritmul lui Gauss Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <iomanip>
#define N 100000000

double v[305][305];
double r[305];

int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","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("%d",&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] > 1e-8 || v[i][p] < -1e-8)
				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 < m; i++)
	{
        if(r[i]) printf("%.10f ",r[i]);
        else printf("0 ");
	}

    return 0;
}