arbre couvrant de poids minimum
t = min_weight_tree([i],g)
entier, numéro de sommet racine de l'arbre
graphe (liste)
vecteur ligne d'entiers : numéros des arcs de l'arbre s'il existe
min_weight_tree
essaye de trouver un arbre
couvrant de poids minimum pour l'arbre graphe g
.
L'argument optionnel i
est le numéro du sommet racine
de l'arbre; sa valeur par défaut est le sommet 1. Ce sommet n'est pas
significatif pour un graphe non-orienté.
Les poids sont données par les éléments
g.edges.data.weight
du graphe. Si ces valeurs ne sont pas
données (vecteur vide []
), elles sont supposées nulles.
Les poids peuvent être positifs, nuls ou négatifs. Pour calculer un arbre
recouvrant sans tenir compte des poids, leur donner une valeur nulle ou
vide []
.
La structure du graphe peut ne pas contenir de champs weight. dans ce cas tous les poids sont supposés nuls. Pour ajouter un champs weight il faut utiliser la fonction add_edge_data.
min_weight_tree
renvoie l'arbre
t
sous forme d'un vecteur ligne des numéros d'arcs (cas
orienté) ou d'arêtes (cas non-orienté), si il existe, ou le vecteur vide
[]
sinon. Si l'arbre existe, la dimension de
t
est le nombre de sommets moins 1. Si
t(i)
est la racine de l'arbre, - pour j < i,
t(j)
est le numéro de l'arc dans l'arbre après le
sommet t(j)
- pour j > i, t(j)
est le numéro de l'arc dans l'arbre avant le sommet
t(j)
ta=[1 1 2 2 2 3 4 5 5 7 8 8 9 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 15 12 13 9 10 14 11 16 1 17 14 15]; g=make_graph('foo',1,17,ta,he); g.nodes.graphics.x=[117,57,7,4,57,57,112,111,145,167,227,232,195,287,291,354,296]; g.nodes.graphics.y=[5,42,87,134,89,135,86,137,191,46,80,135,189,197,69,51,126]; g.nodes.graphics.type(1)=2; show_graph(g); g=add_edge_data(g,"weight",ones(edge_number(g),1)); t=min_weight_tree(1,g); g.edges.graphics.foreground(t)=color('red'); show_graph(g); | ![]() | ![]() |