Cod sursa(job #1580184)

Utilizator PraetorGrigorosoaia Florin Praetor Data 25 ianuarie 2016 17:38:48
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#define NRMAXNXQ 101

using namespace std;

FILE*in;
ofstream out("royfloyd.out");

int nr_nxq; // numarul de noduri ale grafului
int MC[NRMAXNXQ][NRMAXNXQ]; // matricea costurilor

void read()
{
    in=fopen("royfloyd.in", "r");

    fscanf(in, "%d", &nr_nxq);

    for (int i=1; i<=nr_nxq; i++)
        for (int j=1; j<=nr_nxq; j++)
            fscanf(in, "%d", &MC[i][j]);
}

void royfloyd()
{
    for (int k=1; k<=nr_nxq; k++)
        for (int i=1; i<=nr_nxq; i++)
            for (int j=1; j<=nr_nxq; j++)
            {
                if ((MC[i][j] == 0) && (i != j)) // daca nu exista drum de la i la j
                    MC[i][j]=MC[i][k]+MC[k][j];
                else if ((MC[i][k] + MC[k][j] < MC[i][j]) && (MC[i][k]) && (MC[k][j]))
                    MC[i][j]=MC[i][k]+MC[k][j];
            }
}

void show()
{
    for (int i=1; i<=nr_nxq; i++)
    {
        for (int j=1; j<=nr_nxq; j++)
            out<<MC[i][j]<<" ";
        out<<'\n';
    }
}

int main()
{
    read();
    royfloyd();
    show();

    return 0;
}