Cod sursa(job #1363422)

Utilizator MaarcellKurt Godel Maarcell Data 26 februarie 2015 22:49:44
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#define INF (1<<30)
using namespace std;

int N, c[110][110],dp[2][110][110]; bool l;

int main(){
    ifstream fin("royfloyd.in");
    ofstream fout("royfloyd.out");
    fin >> N;

    int i,j,k,t;
    for (i=1; i<=N; i++)
        for (j=1; j<=N; j++)
            fin >> c[i][j];

    for (i=1; i<=N; i++)
        for (j=1; j<=N; j++)
            if (i!=j) dp[0][i][j]=INF;

    for (i=2; i<N; i++){
        l=!l;
        for (j=1; j<=N; j++){
            dp[l][j][j]=0;
            for (k=1; k<=N; k++)
                if (k!=j){
                    dp[l][j][k]=dp[!l][j][k];
                    for (t=1; t<=N; t++)
                        if (c[t][k]) dp[l][j][k]=min(dp[l][j][k], c[t][k]+dp[!l][j][t]);
                }
        }
    }

    for (i=1; i<=N; i++, fout << "\n")
        for (j=1; j<=N; j++)
            if (dp[l][i][j]==INF) fout << 0 << " ";
            else fout << dp[l][i][j] << " ";

    return 0;
}