Pagini recente » Cod sursa (job #139602) | Cod sursa (job #2436191) | Cod sursa (job #1069177) | Cod sursa (job #500580) | Cod sursa (job #2359378)
#include <stdio.h>
int n, A[101][101],i,j,k;
int main()
{
freopen("royfloyd.in","r",stdin);
freopen("royfloyd.out","w",stdout);
scanf("%d",&n);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
scanf("%d",&A[i][j]);
for (k = 1; k <= n; k++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if(i!=j && A[i][k] && A[k][j])//Daca nodurile sunt diferite si exista drumul indirect i->k->j atunci.
if ( A[i][j] > A[i][k] + A[k][j] || A[i][j]==0) //Daca drumul prin nodul 3 (i->k->j) e mai scurt decat cel direct (i->j) sau daca nu exista drum direct .
A[i][j]=A[i][k]+A[k][j]; //Se updateaza valoarea distante i optime.
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++)
printf("%d ",A[i][j]);
printf("\n");}
}