Cod sursa(job #695756)

Utilizator nod_softwareBudisteanu Ionut Alexandru nod_software Data 28 februarie 2012 14:28:29
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>

FILE * fin;
FILE * fout;

long cost[101][101];
long n;

//-----------------------------------
void citire()
{
	fin = fopen("royfloyd.in","r");
	fout = fopen("royfloyd.out","w");
	
	fscanf(fin,"%d",&n);
	for (int i = 1; i<=n; i++)
	{
		for (int j = 1 ; j<=n ; j++)
		{
			fscanf(fin,"%d",&cost[i][j]);
		}
	}
	
	fclose(fin);
}
//-----------------------------------
void roy_floyd()
{
	int k,i,j;
	for (k=1; k<=n; k++)
	{
		for (i=1; i<=n; i++)
		{
			for (j=1; j<=n; j++)
			{
				if (((cost[i][j]>cost[i][k]+cost[k][j])||(cost[i][j]==0)))
				//if ((cost[i][j]>cost[i][k]+cost[k][j]))
				{
					cost[i][j]=cost[i][k]+cost[k][j];
				}
			}
		}
	}
}
//-----------------------------------
void afisare()
{
	int i,j;
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=n; j++)
		{
			if (i==j) cost[i][i]=0;
			fprintf(fout,"%d ",cost[i][j]);
		}
		fprintf(fout,"\n");
	}
}
//-----------------------------------

int main()
{
	citire();
	
	roy_floyd();
	
	afisare();
	
	fclose(fout);	
	return 0;
}