Cod sursa(job #875679)

Utilizator PirvuMihaiPirvu Mihai PirvuMihai Data 10 februarie 2013 17:29:16
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>

const int oo = (1<<30)-1;

int main ()
{
	FILE *f=fopen("royfloyd.in", "rt"), *g=fopen("royfloyd.out", "wt");
	int noduri, v[100][100];
	int i,j,k;
	fscanf(f, "%i ", &noduri);
	
	for(i=1;i<=noduri;i++)
		for(j=1;j<=noduri;j++)
		{
			int x;
			fscanf(f, "%i", &x);
			if(x==0)
				v[i][j]=oo;
			else
				v[i][j]=x;
		}
	
	for(i=1;i<=noduri;i++)
		for(j=1;j<=noduri;j++)
			if(v[i][j]!=oo)
				for(k=1;k<=noduri;k++)
					if(v[j][k]!=oo && v[i][j]+v[j][k] < v[i][k] && i!=k)
						v[i][k]=v[j][k]+v[i][j];
					
	for(i=1;i<=noduri;i++)
	{
		for(j=1;j<=noduri;j++)
			printf("%i %s", v[i][j] != oo ? v[i][j] : 0, v[i][j]>=10 ? "" : " ");
		printf("\n");
	}
	
}