Soit le graphe suivant
on créer la matrice du graphe : M =[ 0 0 1; 1 0 1; 1 0 0];
on installe les fonctions :
exec('Algorithme de Roy Warshall.sce', -1) ;
exec('Fermeture_transitive_x .sce', -1);
exec('Fermeture_transitive .sce', -1);
exec('Fermeture_transitive .sce', -1);
on l'exécute : EstConnexe(M)
Résultat : ans = F Donc faux le graphe n'est pas connexe.
pour la fonction : Fermeturetransitive(xx)
on obtient
1. 0. 1.
1. 1. 1.
1. 0. 1.
on voit bien que la matrice n'est pas connexe.
Donc le résultat
A B C
A 1 0 1
B 1 1 1
C 1 0 1
Si l'on parcours le graphe dans la totalité
A partir de A on peut atteindre A et C.
A partir de B on peut atteindre A B et C.
A partir de C on peut atteindre A B et C.
Par contre ma fonction AlgoRoyWarshall(xx) avait une erreur l'initialisation
donne :
1. 0. 1.
1. 0. 1.
1. 0. 1.
ce qui ne correspond pas à la fermeture transitive (dont peut-être une erreur sur celui-ci?)
l'oublie de l'initalisation
function y = AlgoRoyWarshall(A)
vmax =size(A,1);
i=eye(vmax, vmax); <<--- la ligne manquante
A = i + A
for i = 1:vmax ;
for j =1:vmax ;
for k= 1:vmax ;
A(i , j) = A(i , j) | (A(i , k) & A(k , j)) ;
end ;
end ;
end ;
y= bool2s(A);
endfunction
et donc algo corrigé :
AlgoRoyWarshall(M)
ans =
1. 0. 1.
1. 1. 1.
1. 0. 1.
---- Note d'information sur les fonctions Scilab utilisée
bool2s(A) : transforme une matrice A en matrice booléenne :
ex: A =[ -4 5 1; 3 -2 1; 1 -1 0];
bool2s(A)
ans =
1. 1. 1.
1. 1. 1.
1. 1. 0
eye(vmax, vmax); création d'un matrice booléenne unité (dont tous les termes en diagonale sont égaux à 1, les autres étant nuls), de format n x n.