structure chaînée à partir d'une liste d'adjacence d'un graphe
[fe,che,fn,chn] = chain_struct(g) [fe,che,fn,chn] = chain_struct(lp,la,ls)
graphe (liste)
vecteur ligne de pointeurs de la description du graphe sous forme de liste d'adjacence (sa taille est le nombre de sommets du graphe + 1)
vecteur ligne, tableau d'arcs de la description du graphe sous forme de liste d'adjacence (sa taille est le nombre d'arêtes du graphe)
vecteur ligne, tableau de sommets de la description du graphe sous forme de liste d'adjacence (sa taille est le nombre d'arêtes du graphe)
vecteur ligne des numéros des premières arêtes partant des sommets (sa taille est le nombre de sommets du graphe)
vecteur ligne des numéros des arêtes chaînées (sa taille est le nombre d'arêtes du graphe)
vecteur ligne des numéros des premiers sommets atteints par les arêtes de fe
(sa taille est le nombre de sommets du graphe)
vecteur ligne des sommets atteints par les arêtes de che
chain_struct
calcule les vecteurs lignes de la description par
structure chaînée d'arêtes du graphe g
.
Il est aussi possible de donner directement chain_struct
, la liste
d'adjacence du graphe. Ceci est plus efficace si la liste d'adjacence est
déjà disponible puisque chain_struct
l'utilise pour faire les
calculs.
Les vecteurs fe
, che
, fn
et chn
décrivent la
structure chaînée de la manière suivante :
fe(i))
est le numéro de la première arête partant du sommet i,
che(fe(i))
est le numéro de la deuxième arête partant du sommet i,
che(che(fe(i)))
est le numéro de la troisième arête partant du
sommet i et ainsi de suite jusqu'à ce que la valeur soit égale à 0.
fn(i)
est le numéro du premier sommet atteint à partir du sommet i
ch(i)
est le numéro du sommet atteint par l'arête che(i)
.
ta=[1 1 2 3 5 4 6 7 7 3 3 8 8 5]; he=[2 3 5 4 6 6 7 4 3 2 8 1 7 4]; g=make_graph('foo',1,8,ta,he); g.nodes.graphics.x=[116 231 192 323 354 454 305 155]; g.nodes.graphics.y=[118 116 212 219 117 185 334 316]; show_graph(g); [fe,che,fn,chn] = chain_struct(g) for i=1:node_number(g) hilite_nodes(i); xpause(1d6) cur=fe(i);while cur<>0;hilite_edges(cur);cur=che(cur);xpause(5d5);end unhilite_nodes(i); cur=fe(i);while cur<>0;unhilite_edges(cur);cur=che(cur);end end | ![]() | ![]() |