Cod sursa(job #425916)

Utilizator NemultumituMatei Ionita Nemultumitu Data 26 martie 2010 11:43:23
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
int n;
int mat[101][101],roy[101][101];

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

void citire()
{
	scanf("%d",&n);
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
		{
			scanf("%d",&mat[i][j]);
			if (i==j)
			{
				roy[i][j]=0;
				continue;
			}
			if (mat[i][j]==0)
				roy[i][j]=1<<30;
			else
				roy[i][j]=mat[i][j];
		}
}

void scrie()
{
	for (int i=1;i<=n;++i)
	{
		for (int j=1;j<=n;++j)
			printf("%d ",roy[i][j]);
		printf("\n");
	}
}

int main()
{
	freopen ("royfloyd.in","r",stdin);
	freopen ("royfloyd.out","w",stdout);
	citire();
	for (int k=1;k<=n;++k)
		for (int i=1;i<=n;++i)
			for (int j=1;j<=n;++j)
				roy[i][j]=min(roy[i][j],roy[i][k]+roy[k][j]);
	scrie();
	return 0;
}