Cod sursa(job #414898)

Utilizator skullLepadat Mihai-Alexandru skull Data 10 martie 2010 18:10:28
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#define nmax 101
using namespace std;

int n, a[nmax][nmax];

void citire ()
{
	scanf("%d",&n);
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			scanf("%d",&a[i][j]);
}

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

void afis ()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}

int main ()
{
	freopen("royfloyd.in","r",stdin);
	freopen("royfloyd.out","w",stdout);
	citire ();
	roy ();
	afis ();
	return 0;
}