Cod sursa(job #414899)

Utilizator darrenRares Buhai darren Data 10 martie 2010 18:12:33
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

int n;
int mat[105][105];

void read();
void royfloyd();
void write();

int main() {
	read();
	royfloyd();
	write();
	return 0;
}

void read() {
	freopen("royfloyd.in","r",stdin);
	scanf("%d",&n);
	for (int i=0;i<n;++i)
		for (int j=0;j<n;++j)
			scanf("%d",&mat[i][j]);
}

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

void write() {
	freopen("royfloyd.out","w",stdout);
	for (int i=0;i<n;++i) {
		for (int j=0;j<n;++j)
			printf("%d ",mat[i][j]);
		printf("\n");
	}
}