Cod sursa(job #149426)

Utilizator radamiRadu Patulescu radami Data 5 martie 2008 18:30:36
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>

int mat[110][110],n;

int min (int a,int b)
{
	if (a < b)
		return a;
	return b;
	
}

int main ()
{
	freopen("royfloyd.in","r",stdin);
	freopen("royfloyd.out","w",stdout);
	
	scanf("%d",&n);
	for (int i = 1;i <= n; i++)
		for (int j = 1;j <= n; j++)
			scanf("%d",&mat[i][j]);
	
	for (int k = 1;k <= n; k++)
		for (int i = 1;i <= n; i++)
			for (int j = 1;j <= n; j++)
				if ((mat[i][j] && mat[i][k] && mat[k][j]) || (!mat[i][j] && i != j))
					mat[i][j] = min ( mat[i][j],mat[i][k] + mat[k][j]);
	
	for (int i = 1;i <= n; i++)
		{
			for (int j = 1;j <= n; j++)
				printf("%d ",mat[i][j]);
			printf("\n");
		}
			
	return 0;
}