Cod sursa(job #1850145)

Utilizator Coroian_DavidCoroian David Coroian_David Data 18 ianuarie 2017 11:40:46
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>

using namespace std;

FILE *f, *g;

int n;

int a[101][101];

void readFile()
{
    f = fopen("royfloyd.in", "r");

    int i, j;

    fscanf(f, "%d", &n);

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

    fclose(f);
}

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

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

void printFile()
{
    g = fopen("royfloyd.out", "w");

    int i, j;

    for(i = 1; i <= n; i ++)
    {
        for(j = 1; j <= n; j ++)
            fprintf(g, "%d ", a[i][j]);

        fprintf(g, "\n");
    }

    fclose(g);
}

int main()
{
    readFile();

    solve();

    printFile();

    return 0;
}