Cod sursa(job #2918011)

Utilizator livliviLivia Magureanu livlivi Data 9 august 2022 11:55:11
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.8 kb
// #include <iostream>
#include <fstream>

using namespace std;

ifstream cin("royfloyd.in");
ofstream cout("royfloyd.out");

const int INF = 1000000;

// int rf[101][101][101];
int rf[101][101];

void royfloyd(int n) {
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                /* observatii:
                    - schimbare de topica
                    - rf[k][i][k] = rf[k - 1][i][k] (din definitie)
                    
                rf[k][i][j] = rf[k - 1][i][j];
                rf[k][i][k] = rf[k - 1][i][k];
                rf[k][k][j] = rf[k - 1][k][j];
                
                
                rf[i][j] = rf[i][j];
                rf[i][k] = rf[i][k];
                rf[k][j] = rf[k][j];
                */
                
                rf[i][j] = min(
                    rf[i][j],
                    rf[i][k] + rf[k][j]
                );
            }
        }
    }
}

int main() {
    int n; cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> rf[i][j];
            if (rf[i][j] == 0 && i != j) {
                rf[i][j] = INF;
            }
            
            // cin >> rf[0][i][j];
            // if (rf[0][i][j] == 0 && i != j) {
            //     rf[0][i][j] = INF;
            // }
        }
    }
    
    royfloyd(n);
    
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (rf[i][j] == INF) {
                cout << "0 ";
            } else {
                cout << rf[i][j] << " ";
            }
            
            // if (rf[n][i][j] == INF) {
            //     cout << "0 ";
            // } else {
            //     cout << rf[n][i][j] << " ";
            // }
        }
        cout << "\n";
    }
    
    return 0;
}