Cod sursa(job #2115119)

Utilizator RenataRenata Renata Data 26 ianuarie 2018 12:34:24
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.55 kb
#include <stdio.h>
#include <stdlib.h>
#define INF 1001 //infinit ( 1000 = maximul valorii)
#define NIL -1
void afisare(int n, int a[n][n])
{
    int i,j;
    for(i =0;i<n;i++)
    {
        printf("\n");
        for(j=0;j<n;j++)
            printf("%d ", a[i][j]);
    }
    printf("\n");
}
int main()
{

    FILE *f = fopen("royfloyd.in", "r");
    FILE *g = fopen("royfloyd.out","w");

    int n, i, j, k;
    fscanf(f, "%d", &n);

    int a[n][n], d[n][n], pi[n][n];

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

    for(i =0;i<n;i++)
        for(j=0;j<n;j++)
            if(a[i][j] == 0)
            {
                if(i != j)
                    d[i][j] = INF;
                else
                     d[i][j] = 0;
                pi[i][j] = NIL;
            }
            else
            {
                d[i][j] = a[i][j];
                pi[i][j] = i;
            }

    for(k=0; k<n; k++)
        for(i=0; i<n; i++)
            if( i != k)
                for(j=0; j<n; j++)
                    if(d[i][k] != INF && d[k][j] != INF && d[i][j] > d[i][k] + d[k][j])
                    {
                        d[i][j] = d[i][k] + d[k][j];
                        pi[i][j] = pi[k][j];
                    }


    for(i =0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(d[i][j] == INF)
                d[i][j] = 0;
            fprintf(g,"%d ", d[i][j]);
        }
        fprintf(g,"\n");
    }

    fclose(f);
    fclose(g);

    return 0;
}