Cod sursa(job #1047741)

Utilizator caliuxSegarceanu Calin caliux Data 4 decembrie 2013 20:47:15
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define INF (1<<30) - 1
using namespace std;

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

int N, i, j, x, y, z, d[105][105];

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

int main(){
    in >> N;
    for(i = 1; i <= N; i++){
        for(j = 1; j <= N; j++){
            in >> d[i][j];
            if(i != j && d[i][j] == 0){
                d[i][j] = INF;
            }
        }
    }
    for(z = 1; z <= N; z++){
        for(x = 1; x <= N; x++){
            for(y = 1; y <= N; y++){
                if(d[x][z] && d[z][y]){
                    d[x][y] = minimum(d[x][z] + d[z][y], d[x][y]);
                }
            }
        }
    }
    for(i = 1; i <= N; i++){
        for(j = 1; j <= N; j++){
            if(d[i][j] == INF){
                out << "0 ";
            }else{
                out << d[i][j] << " ";
            }
        }
        out << "\n";
    }
}