Cod sursa(job #1466449)

Utilizator dimavascan94VascanDumitru dimavascan94 Data 29 iulie 2015 11:14:44
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
using namespace std;
 
int N,i,j,length[260][260],nmbOfStreets[260][260]={0},k;
 
int main()
{
    freopen("rf.in","r",stdin);
    freopen("rf.out","w",stdout);
     
    scanf("%d",&N);
     
    for (i=0;i<N;++i)
        for (j=0;j<N;++j)
        {
            scanf("%d",&length[i][j]);
            if (length[i][j]>0) nmbOfStreets[i][j]=1;
        }
             
    for (k=0;k<N;++k)
        for (i=0;i<N;++i)
            for (j=0;j<N;++j)    
                if (length[i][k]>0 && length[k][j]>0 && (length[i][j]==0 || length[i][j]>length[i][k]+length[k][j]) && i!=j)
                    length[i][j]=length[i][k]+length[k][j],
                    nmbOfStreets[i][j]=nmbOfStreets[i][k]+nmbOfStreets[k][j];
                else if (length[i][k]>0 && length[k][j]>0 &&  length[i][j]==length[i][k]+length[k][j] && i!=j)
                    nmbOfStreets[i][j]=max(nmbOfStreets[i][k]+nmbOfStreets[k][j],nmbOfStreets[i][j]);
                     
    for (i=0;i<N;++i)
    {
        for (j=0;j<N;++j)
            printf("%d ",length[i][j]);
        printf("\n");       
    }
     
    for (i=0;i<N;++i)
    {
        for (j=0;j<N;++j)
            printf("%d ",nmbOfStreets[i][j]);
        printf("\n");       
    }
    
    return 0;
}