Cod sursa(job #678843)

Utilizator CeachiCeachi Bogdan Ceachi Data 12 februarie 2012 14:28:55
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int cs[101][101],n;
#define infinit 10000000
void citire() {
	int i,j;
	fin>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			fin>>cs[i][j];
}
void precalcul() {
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(cs[i][j]==0) cs[i][j]=infinit;
}
void roy_floyd() {
	int i,j,k;
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				if(i!=j&&k!=i&&k!=j) {
					int aux=cs[i][k]+cs[k][j];
					if(cs[i][j]>aux) cs[i][j]=aux;
				}
}

void actualizare() {
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(cs[i][j]>=infinit) cs[i][j]=0;
}

int main() {
	citire();
	precalcul();
	roy_floyd();
	actualizare();
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) fout<<cs[i][j]<<" ";
		fout<<"\n";
	}
return 0;
}