Cod sursa(job #695728)

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

FILE * fin;
FILE * fout;

int cost[101][101];
int 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[x][z]!=0)&&(cost[z][y]!=0) && (cost[x][y]>cost[x][z]+cost[z][y]))
				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++)
		{
			fprintf(fout,"%d ",cost[i][j]);
		}
		fprintf(fout,"\n");
	}
}
//-----------------------------------

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