Cod sursa(job #143736)

Utilizator coderninuHasna Robert coderninu Data 26 februarie 2008 20:20:44
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <values.h>
#define Nmax 101

int n, c[Nmax][Nmax], i, j, k;

inline int min(int x, int y) { return x<y?x:y; }

int main()
{
	freopen("royfloyd.in", "r", stdin);
	scanf("%d\n", &n);
	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++)
			scanf("%d ", &c[i][j]);


	for (k=1; k<=n; k++)
		for (i=1; i<=n; i++)
			for (j=1; j<=n; j++)
				if (i!=j && i!=k)
				{
					if (!c[i][j])
					{
						if (c[i][k] && c[k][j])
							c[i][j]=c[i][k]+c[k][j];
					}
					else if ( c[i][k] && c[k][j])
						c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
				}
	freopen("royfloyd.out", "w", stdout);
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=n; j++)
			if (c[i][j]!=MAXINT)
				printf("%d ", c[i][j]);
			else 
				printf("0 ");
		printf("\n");
	}
	fclose(stdout);
	return 0;
}