Cod sursa(job #425944)

Utilizator NemultumituMatei Ionita Nemultumitu Data 26 martie 2010 11:56:24
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 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<<29;
			else
				roy[i][j]=mat[i][j];
		}
}

void scrie()
{
	for (int i=1;i<=n;++i)
	{
		for (int j=1;j<=n;++j)
			if (roy[i][j]==1<<30)
				printf("%d",0);
			else
				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;
}