Cod sursa(job #2359378)

Utilizator YourAverageGodTimboiu Razvan-Nicolae YourAverageGod Data 28 februarie 2019 20:02:17
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#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");}
}