Cod sursa(job #1292295)

Utilizator stefan1Medvichi Stefan stefan1 Data 14 decembrie 2014 00:04:33
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#define DMAX 105
#define INF 1000000000

using namespace std;
FILE * fin=fopen("royfloyd.in", "r");
FILE * fout=fopen("royfloy.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)
            fprintf(fout, "%d ", D[i][j]);
        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;
}

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);
                D[i][j]=cost;
            }
        D[i][i]=0;
    }
}