Cod sursa(job #634506)

Utilizator yamahaFMI Maria Stoica yamaha Data 16 noiembrie 2011 16:25:24
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;
#define maxn 101
#define inf 1011
int N, C[maxn][maxn], D[maxn][maxn], Urm[maxn][maxn];

void royfloyd(void)
{
     int i,j,k;
     for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
           if(C[i][j] && C[i][j]!=inf) Urm[i][j]=j;
           else Urm[i][j]=0;     
     memcpy(D,C,sizeof(C));
     for(k=1;k<=N;k++)
        for(i=1;i<=N;i++)
           for(j=1;j<=N;j++)
              if(D[i][j]>D[i][k]+D[k][j])
              {
                  D[i][j]=D[i][k]+D[k][j];
                  Urm[i][j]=Urm[i][k];
              }
}

int main (void)
{
    freopen("royfloyd.in","r",stdin);
    scanf("%d",&N);  
    for(int i=1;i<=N;i++)
       for(int j=1;j<=N;j++)
          scanf("%d",&C[i][j]); 
    royfloyd();
    freopen("royfloyd.out","w",stdout);
    for(int i=1;i<=N;i++)
       {for(int j=1;j<=N;j++) printf("%d ",D[i][j]);
        printf("\n");} 
    return 0;
}