Cod sursa(job #932120)

Utilizator CrescentselectJicol Crescent Crescentselect Data 28 martie 2013 18:34:07
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>

int n, a[105][105];

FILE * in = fopen("royfloyd.in","r");
FILE * out = fopen("royfloyd.out","w");

void citire()
{
	int i, j;
	fscanf(in,"%d",&n);
	for (i = 1; i <= n; i++)
		for (j = 1; j <= n; j++)
            fscanf(in,"%d",&a[i][j]);
}

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

void afis()
{
	int i, j;
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
		{
            fprintf(out,"%d ",a[i][j]);
		}
		fprintf(out,"\n");
	}
}


int main()
{
	citire();
	roy_floyd();
	afis();
	return 0;
}