Cod sursa(job #2074462)

Utilizator NacuCristianCristian Nacu NacuCristian Data 24 noiembrie 2017 17:17:27
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
#include<stdlib.h>

using namespace std;


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

int minim(int a, int b)
{
    if(a<b)
        return a;
    return b;
}

void pinkFloyd(int *** mat, int n)
{
    for(int k=0;k<n;k++)
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                if((*mat)[i][k]!=0 && (*mat)[k][j]!=0)
                (*mat)[i][j]=minim((*mat)[i][j],(*mat)[i][k]+(*mat)[k][j]);
}

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

int main()
{
    int ** mat,n;

    citire(&mat,&n);
    pinkFloyd(&mat,n);
    afisare(mat,n);

    return 0;
}