Cod sursa(job #605927)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 2 august 2011 20:49:14
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>

const int N = 260;

int d[N][N]; int n;//In mod normal trebuia initializat cu infinit, nu este cazul aici.
int l[N][N];

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

void roy_floyd()
{
	for (int k = 1; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j)
				if (d[i][k] + d[k][j] <= d[i][j] && d[i][k] != 0 && d[k][j] != 0)
				{
					d[i][j] = d[i][k] + d[k][j];
					++l[i][j];
				}
}

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

int main()
{
	freopen("rf.in","r",stdin);
	freopen("rf.out","w",stdout);
	citire();
	roy_floyd();
	scriere();
	return 0;
}