Cod sursa(job #1450649)

Utilizator danut.avadaneiDanut Avadanei danut.avadanei Data 14 iunie 2015 03:29:57
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
/**
*N <= 100
*M ponderilor
*
**/
#include <stdio.h>
int dist[101][101],N,i,j,k;
int min(int a, int b)
{
	if(a > b) return b;
	else return a;
}
void show()
{
	freopen("royfloyd.out","w",stdout);
	for(i = 1; i <= N; i++)
	{
		for(j = 1; j <= N;  j++)
		{
			printf("%d ",dist[i][j]);
		}
		printf("\n");
	}
	fclose(stdout);
}
void read() 
{
	freopen("royfloyd.in","r",stdin);
	scanf("%d",&N);
	for(i = 1; i <= N; i++)
	{
		for(j = 1; j <= N;  j++)
		{
			scanf("%d",&dist[i][j]);
		}
	}
	fclose(stdin);
}
void rf()
{
	for(k = 1; k <= N;k++)
	{
		for(i = 1; i <= N;i++)
		{
			for(j = 1; j <= N;j++)
			{
				if(i != j && i != k && j != k )
				{
					if(!dist[i][j])
						dist[i][j] = dist[i][k] + dist[k][j];
					else
						dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
				}
			}
		}
	}
}
int main()
{
	read();
	rf();
	show();
	return 0;
}