Cod sursa(job #264722)

Utilizator rayvianPricope Razvan rayvian Data 22 februarie 2009 17:19:29
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int 	v[101][101];
int 	n;

void citire();
void afisare();
void rezolva();

int main()
{
	citire();
	rezolva();
	afisare();
	return 0;
}


void rezolva()
{
	int i;
	int j;
	int k;
	for(k=1; k<=n; k++)
		for(i=1; i<=n; i++)
			for(j=1; j<=n; j++)
				if(i!=j && j!=k && i!=k)
				if( (v[i][k]) && (v[k][j]) &&  (v[i][j]>v[i][k]+v[k][j] || !v[i][j]) )
					v[i][j]=v[i][k]+v[k][j];
}

void afisare()
{
	int i;
	int j;
  FILE *g=fopen("royfloyd.out","w");
  for(i=1; i<=n; i++)
  {
  	if(i!=1)
			fprintf(g,"\n");
		for(j=1; j<=n; j++)
			fprintf(g,"%d ",v[i][j]);
  }
  fclose(g);
}

void citire()
{
	int i;
	int j;

	FILE *f=fopen("royfloyd.in","r");
	fscanf(f,"%d",&n);
	for(i=1; i<=n; i++)
		for(j=1; j<=n; j++)
			fscanf(f,"%d",&v[i][j]);
	fclose(f);
}