Cod sursa(job #837907)

Utilizator AnteusPatrascoiu Mihai Anteus Data 18 decembrie 2012 20:14:47
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#define NMAX 105
#define INF 1<<29
int v[NMAX][NMAX];
int n;

void read()
{
	scanf ("%d", &n);
	
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
		{
			scanf ("%d", &v[i][j]);
			
			if (i!=j && v[i][j]==0)
				v[i][j]=INF;
		}
}

void Royfloyd()
{
	for (int k=1;k<=n;k++)
		for (int i=1;i<=n;i++)
			for (int j=1;j<=n;j++)
				if (i!=j && j!=k && i!=k && v[i][j] > v[i][k] + v[k][j])
					v[i][j] = v[i][k] + v[k][j];
				
}

void print()
{
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		{
			if (v[i][j]==INF)
				v[i][j]=0;
			
			printf ("%d ", v[i][j]);
		}
		printf ("\n");
	}
}

int main()
{
	freopen ("royfloyd.in", "r", stdin);
	freopen ("royfloyd.out", "w", stdout);
	
	read();
	
	Royfloyd();
	
	print();
	
	return 0;
}