min-cost perfect matching
[cst,nmatch] = perfect_match(g,arcost)
:a undirected graph (see graph_data_structure).
integer row vector
integer
integer row vector
perfect_match
finds a perfect min-cost matching for the graph g
.
g
must be an undirected graph with an even number of nodes.
arcost
is the vector of the (integer) costs of the arcs (the dimension
of arcost
is twice the number of edges of the graph).
The output is the vector nmatch
of the perfect matching and the
corresponding cost cst
.
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); 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]; show_graph(g); m2=2*size(ta,2); arcost=round(100.*rand(1,m2)); [cst,nmatch] = perfect_match(g,arcost); v=index_from_tail_head(g,1:n,nmatch) hilite_edges(v); | ![]() | ![]() |
U. Derigs "Solving non-bipartite matching problems via shortest path techniques" Annals of operations research 7, 1988.