Cod sursa(job #491545)

Utilizator RegeleUmbrelorPopescu Mihai RegeleUmbrelor Data 11 octombrie 2010 19:11:19
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
using namespace std;
#include<stdio.h>
const int N=103,VMAX=103000;
int n, a[N][N], mr[N][N];

int adevar(int x,int y,int k)
{
	if(mr[x][k]==VMAX || mr[k][y]==VMAX)
		return VMAX;
	return mr[x][k]+mr[k][y];
}

int minim(int a, int b)
{
	if(a<b) 
		return a;
	return b;
}

void citire()
{
	scanf("%d", &n);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
		{	
			scanf("%d",&a[i][j]);
			if(i!=j && a[i][j]==0)
				mr[i][j]=VMAX;
			else
				mr[i][j]=a[i][j];
		}
}

void rfy()
{
	int s;
	for(int k=1;k<=n;++k)
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
			{	
				s=adevar(i,j,k);
				mr[i][j]=minim(mr[i][j],s);
			}
}

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

int main()
{
	freopen("royfloyd.in","r",stdin);
	freopen("royfloyd.out","w",stdout);
	citire();
	rfy();
	afisare();
	return 0;
}