Cod sursa(job #546485)

Utilizator nickyyLal Daniel Emanuel nickyy Data 4 martie 2011 23:33:42
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
using namespace std;
#define MaxN 105
#define minim(a,b) (a<b ? a:b)
int w[MaxN][MaxN];
int n;

    void citire(void)
    {   FILE *fin=fopen("royfloyd.in","r");
        int i,j;
        fscanf(fin,"%d",&n);
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                fscanf(fin,"%d",&w[i][j]);
        fclose(fin);
    }

    void RoyFloyd(void)
    {   int i,j,k;
        for(k=1;k<=n;k++)
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    if(w[i][k] && w[k][j] && i!=j && (w[i][j]>w[i][k]+w[k][j] || !w[i][j]))
                        w[i][j]=w[i][k]+w[k][j];
    }

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

int main(void)
{   citire();
    RoyFloyd();
    scrie();
    return 0;
}