Cod sursa(job #811606)

Utilizator ephgstefana gal ephg Data 12 noiembrie 2012 18:46:06
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<cstdio>
#include<algorithm>
using namespace std;
#define BM 105
#define mare (1<<30)
int m[BM][BM],n,mf[BM][BM],viz[BM][BM];
int d(int i,int j){
	if(viz[i][j])return mf[i][j];
	viz[i][j]=1;
	int k;
	for(k=1;k<=n;++k)mf[i][j]=min(mf[i][j],d(i,k)+d(k,j));
	return mf[i][j];
}
int main () {
	int i,j;
	freopen("royfloyd.in","r",stdin);
	freopen("royfloyd.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)for(j=1;j<=n;++j){
		scanf("%d",&m[i][j]);
		if(i!=j&&m[i][j]==0)mf[i][j]=mare;
		else mf[i][j]=m[i][j];
	}
	for(i=1;i<=n;++i)for(j=1;j<=n;++j)mf[i][j]=d(i,j);
	for(i=1;i<=n;++i){
		for(j=1;j<=n;++j)printf("%d ",mf[i][j]);
		printf("\n");
	}
	return 0;
}