Cod sursa(job #811621)

Utilizator ephgstefana gal ephg Data 12 noiembrie 2012 18:57:24
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
#include<algorithm>
using namespace std;
#define BM 105
#define mare (1<<29)
int 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)if(k!=i&&k!=j)mf[i][j]=min(mf[i][j],d(i,k)+d(k,j));
	return mf[i][j];
}
int main () {
	int i,j,el;
	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",&el);
		if(i!=j&&el==0)mf[i][j]=mare;
		else mf[i][j]=el;
	}
	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){
			if(mf[i][j]==mare)printf("0 ");
			else printf("%d ",mf[i][j]);
		}
		printf("\n");
	}
	return 0;
}