Cod sursa(job #441687)

Utilizator robigiirimias robert robigi Data 13 aprilie 2010 08:49:01
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

FILE *f=fopen("royfloyd.in", "r");
FILE *g=fopen("royfloyd.out", "w");


int n, v[101][101];
int w[101][101];


void read()
{
	fscanf(f, "%d", &n);
	for (int i=1; i<=n; i++)
		for (int j=1; j<=n; j++)
		{
			fscanf(f, "%d", &v[i][j]);
			if (v[i][j]!=0) 
				w[i][j]=v[i][j];
			else
				w[i][j]=999999;
		}
}


int minim(int x, int y)
{
	if (x<y) return x;
	return y;
}


void program()
{
	for (int k=1; k<=n; k++)
		for (int i=1; i<=n; i++)
			for (int j=1; j<=n; j++)
			{
				w[i][j]=minim(w[i][j], w[i][k]+w[k][j]);
				if (i==j) w[i][j]=0;
			}
}

void afis()
{
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
			fprintf(g, "%d ", w[i][j]);
		fprintf(g, "\n");
	}
}


int main()
{
	read();
	program();
	afis();
	fclose(f);
	fclose(g);
	return 0;
}