Cod sursa(job #1292315)

Utilizator stefan1Medvichi Stefan stefan1 Data 14 decembrie 2014 00:47:05
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#define DMAX 105
#define INF 10000000

using namespace std;
FILE * fin=fopen("royfloyd.in", "r");
FILE * fout=fopen("royfloyd.out", "w");

int n;
int D[DMAX][DMAX]; // matricea drumurilor de cost minim

void citire();
void royfloyd();
void afisare();

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

void royfloyd()
{
int i, j, k;

for (k=1; k<=n; ++k)
    for (i=1; i<=n; ++i)
        for (j=1; j<=n; ++j)
            if (D[i][j]>D[i][k]+D[k][j])
                D[i][j]=D[i][k]+D[k][j];
}

void afisare()
{
int i, j;

for (i=1; i<=n; ++i)
    {
        for (j=1; j<=n; ++j)
            if (D[i][j]!=INF) fprintf(fout, "%d ", D[i][j]);
                else fprintf(fout, "0 ");
        fprintf(fout, "\n");
    }
fclose(fout);
}

void init()
{
int i, j;

for (i=1; i<=n; ++i)
    {
        for (j=1; j<=n; ++j)
            D[i][j]=INF;
        D[i][i]=0;
    }
}

void citire()
{
int i, j, cost;
fscanf(fin, "%d", &n);
init();
for (i=1; i<=n; ++i)
    {
        for (j=1; j<=n; ++j)
            {
                fscanf(fin, "%d ", &cost);
                if (cost) D[i][j]=cost;
            }
    }
}