base des cycles d'un graphe simple non-orienté
spc = cycle_basis(g)
graphe (liste)
matrice creuse
Tout d'abord un arbre couvrant est trouvé avec min_weight_tree
et est
ensuite utilisé pour trouver tous les cycles fondamentaux par rapport à
cet arbre. Ils sont renvoyés sous forme d'un
ensemble de cycles, chaque cycle étant représenté par un ensemble d'arêtes.
Ces cycles sont renvoyés dans une matrice creusespc
: chaque ligne
de cette matrice correspond à un cycle.
Le graphe g
est supposé simple, non-orienté et connecté
(cycle_basis
ne vérifie pas que le graphe est simple, utiliser
graph_simp
m avant l'appel si nécessaire).
//create a directed graph ta=[1 1 2 2 2 3 4 5 5 7 8 8 9 10 10 10 10 10 11 12 13 13 13 14 15 16 16 17 17]; he=[2 10 3 5 7 4 2 4 6 8 6 9 7 7 11 13 13 15 12 13 9 10 14 11 16 1 17 14 15]; gt=make_graph('foo',1,17,ta,he); gt.nodes.graphics.x=[283 163 63 57 164 164 273 271 339 384 504 513 439 623 631 757 642]/2; gt.nodes.graphics.y=[59 133 223 318 227 319 221 324 432 141 209 319 428 443 187 151 301]/2; show_graph(gt); //Make simple and undirected g=graph_simp(gt); show_graph(g,'new'); //Compute the cycle basis cycles_list=cycle_basis(g,'list'); //Display the cycles for c=cycles_list,hilite_edges(c);xpause(1d6),unhilite_edges(c);end; | ![]() | ![]() |