Cod sursa(job #449341)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 6 mai 2010 11:08:46
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
# include <cstdio>

using namespace std;

# define FIN "royfloyd.in"
# define FOUT "royfloyd.out"
# define inf 0x3f3f3f3f
# define MAX_N 105

int N, val, i, j;
int D[MAX_N][MAX_N];

    void roy_floyd() {
         int i, j, k;         
         
         for (k = 1; k <= N; ++k)
            for (i = 1; i <= N; ++i)
               for (j = 1; j <= N; ++j)
                  if (i != j && D[i][j] > D[i][k] + D[k][j]) D[i][j] = D[i][k] + D[k][j];
    }

     int main() {
         freopen(FIN, "r", stdin);
         freopen(FOUT, "w", stdout);
         
         scanf("%d", &N);
         for (i = 1; i <= N; ++i)
            for (j = 1; j <= N; ++j) {
                scanf("%d", &val);
                if (i == j) { D[i][j] = 0; continue; }
                
                D[i][j] = (!val ? inf : val);
            }
     
         roy_floyd();
         
         for (i = 1; i <= N; ++i)
             for (j = 1; j <= N; ++j)
                if (D[i][j] == inf) D[i][j] = 0;
         
         for (i = 1; i <= N; ++i) {
             for (j = 1; j <= N; ++j)
                printf("%d ", D[i][j]);
             printf("\n");
         }
     
         return 0;
     }