meilleur appariement d'un graphe
[card,match] = best_match(g)
graphe (liste)
entier
vecteur ligne d'entiers
best_match
trouve un appariement optimal pour le
graphe g
. Les sorties sont card
et
le vecteur match
. card
est la
cardinalité d'un appariement optimal de g. match(i)
est
le sommet adjacent au sommet i
dans l'appariement
optimal ou 0 si i
n'est pas apparié.
//create the graph ta=[27 27 3 12 11 12 27 26 26 25 25 24 23 23 21 22 21 20 19 18 18]; ta=[ta 16 15 15 14 12 9 10 6 9 17 8 17 10 20 11 23 23 12 18 28]; he=[ 1 2 2 4 5 11 13 1 25 22 24 22 22 19 13 13 14 16 16 9 16]; he=[he 10 10 11 12 2 6 5 5 7 8 7 9 6 11 4 18 13 3 28 17]; n=28; g=make_graph('foo',0,n,ta,he); // Graph display xx=[46 120 207 286 366 453 543 544 473 387 300 206 136 250 346 408]; g.nodes.graphics.x=[xx 527 443 306 326 196 139 264 55 58 46 118 513]; yy=[36 34 37 40 38 40 35 102 102 98 93 96 167 172 101 179]; g.nodes.graphics.y=[yy 198 252 183 148 172 256 259 258 167 109 104 253]; g.nodes.graphics.display='name'; show_graph(g); [card,match] = best_match(g); mprintf("Nombre d'arcs dans l'appariement=%d nombre de noeuds=%d\n",card,node_number(g)) // calcul des index des arcs de l'appariement v=index_from_tail_head(g,1:n,match) //Affichage des arcs de l'appariement hilite_edges(v); // // Avec un graphe plus gros g=load_graph(metanet_module_path()+'/demos/mesh1000.graph'); g.directed=0; ta=g.edges.tail;he=g.edges.head;n=node_number(g); show_graph(g,'new',1/2,[1000,400]); [card,match] = best_match(g); hilite_edges(index_from_tail_head(g,1:n,match)); | ![]() | ![]() |