Cod sursa(job #1097664)

Utilizator horatiu13Horatiu horatiu13 Data 3 februarie 2014 19:29:42
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#define Nmax 105
#define MAX ~(1<<31)
using namespace std;

FILE *fi = fopen("royfloyd.in", "r");
FILE *fo = fopen("royfloyd.out", "w");
int a[Nmax][Nmax];
int n;


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

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

void afisare()
{
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
			fprintf(fo, "%d ", a[i][j]);
		fprintf(fo, "\n");
	}
}

int main()
{
	citire();
	roy();
	afisare();
	return 0;
}