Cod sursa(job #1082073)

Utilizator Master011Dragos Martac Master011 Data 14 ianuarie 2014 10:04:19
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<cstdio>
#define FOR(i,a,b) for(i = a ; i <= b ; ++i)
#define MaxN 101
using namespace std;

int dist[MaxN][MaxN];

int main (){
    FILE *in=fopen("royfloyd.in","r");
    int n,i,j,k;
    fscanf(in,"%d",&n);
    FOR(i,1,n)
        FOR(j,1,n)
            fscanf(in,"%d",&dist[i][j]);
    fclose(in);
    FOR(k,1,n)
        FOR(i,1,n)
            FOR(j,1,n){
                if(((dist[i][j] > dist[i][k] + dist[k][j] || !dist[i][j]) && i != j) && dist[i][k] && dist[k][j] )
                    dist[i][j]=dist[i][k]+dist[k][j];
            }
    FILE *out=fopen("royfloyd.out","w");
    FOR(i,1,n){
        FOR(j,1,n)
            fprintf(out,"%d ",dist[i][j]);
        fprintf(out,"\n");
    }
    fclose(out);
    return 0;
}