Cod sursa(job #497572)

Utilizator skullLepadat Mihai-Alexandru skull Data 2 noiembrie 2010 21:21:20
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
using namespace std;
#define nmax 105

int A[nmax][nmax];
int n;

void citire ()
{
	int i, j;
	freopen("royfloyd.in","r",stdin);
	scanf("%d", &n);
	for (i = 1; i <= n; ++i)
		for (j = 1; j <= n; ++j)
			scanf("%d", &A[i][j]);
}

void roy ()
{
	int k, i, j;
	for (k = 1; k <= n; ++k)
		for (i = 1; i <= n; ++i)
			for (j = 1; j <= n; ++j)
				if (i!=j && A[i][k]>0 && A[k][j]>0 && (A[i][j]>A[i][k]+A[k][j] || A[i][j]==0) )
					A[i][j] = A[i][k] + A[k][j];
}

void afisare ()
{
	int i, j;
	freopen("royfloyd.out","w",stdout);
	for (i = 1; i <= n; ++i)
	{
		for (j = 1; j <= n; ++j)
			printf("%d ", A[i][j]);
		printf("\n");
	}
}
	
int main ()
{
	citire ();
	roy ();
	afisare ();
	return 0;
}