Cod sursa(job #561015)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 18 martie 2011 20:05:15
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
/* 
 * File:   main.cpp
 * Author: zalman
 *
 * Created on March 18, 2011, 7:56 PM
 */

#include <cstdio>
#define NMAX 105
using namespace std;

int N, A[NMAX][NMAX];

void read(void)
{
    FILE *f = fopen("royfloyd.in", "r");
    fscanf(f, "%d", &N);
    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            fscanf(f, "%d", &A[i][j]);

    fclose(f);
}

void RoyFloyd(void)
{
    for(int k = 1; k <= N; ++k)
        for(int i = 1; i <= N; ++i)
            for(int j = 1; j <= N; ++j)
                if( i!=j && A[i][k] && A[k][j])
                    if(!A[i][j] || A[i][j] > A[i][k] + A[k][j])
                        A[i][j] = A[i][k] + A[k][j];

}

void print(void)
{
    FILE *g = fopen("royfloyd.out", "w");
    for(int i = 1; i <= N; ++i)
    {
        for(int j = 1; j <= N; ++j)
            fprintf(g, "%d ", A[i][j]);
        fprintf(g, "\n");
    }

    fclose(g);
}
int main(void)
{
    read();
    RoyFloyd();
    print();
    return 0;
}