Cod sursa(job #827907)

Utilizator GumiPipeNoName GumiPipe Data 2 decembrie 2012 19:57:27
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <limits.h>
#include <string.h>

#define MAX_N (100 + 1)

int main()
{
	unsigned int i, j, k, n;
	unsigned int mat[MAX_N][MAX_N];

	freopen("royfloyd.in", "r", stdin);
	freopen("royfloyd.out", "w", stdout);
	memset(mat, INT_MAX, MAX_N * MAX_N * sizeof (unsigned int));

	scanf("%u\n", &n);

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < n; ++j)
		{
			scanf("%u", &mat[i][j]);
		}
	}

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < n; ++j)
		{
			for (k = 0; k < n; ++k)
			{
				if (j != i && mat[i][k] && mat[k][j] && (mat[i][k] + mat[k][j] < mat[i][j]))
				{
					mat[i][j] = mat[i][k] + mat[k][j];
				}
			}
		}
	}

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < n; ++j)
		{
			printf("%u ", mat[i][j]);
		}
		printf("%\n");
	}

	return 0;
}