Cod sursa(job #2683888)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 12 decembrie 2020 10:52:37
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <vector>
#define NMAX 105
#define INF 0x3f3f3f3f
using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");

int n, m;
int c[NMAX][NMAX];

void init(){
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if(i!=j)
                c[i][j] = INF;
        }
    }
}

void citire(){
    f>>n;
    init();
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            f>>c[i][j];
}


void parcurg(int k){
     for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++){
            if((c[i][j] > c[i][k] + c[k][j] || !c[i][j]) && c[i][k]!=0 && c[k][j]!=0 && i!=j){
                c[i][j] = c[i][k] + c[k][j];
            }
     }
}

void roy_floyd(){
    for(int k=1; k<=n; k++)
        parcurg(k);
}
int main()
{
    citire();
    roy_floyd();
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if(c[i][j] == INF)
                g<<"0 ";
            else
                g<<c[i][j]<<" ";
        }
        g<<'\n';
    }
    return 0;
}