Я провел несколько экспериментов и, хотя и не задокументирован, кажется, что FindEdgeCover[]
делает то, что вы хотите.
Рассмотрим для примера:
h[list_] := CompleteGraph[4, EdgeWeight -> list]
FindEdgeCover[h@Range@6]
(*
-> {1->2,1->3,1->4}
*)
Но
FindEdgeCover[h@Reverse@Range@6]
(*
-> {1->2,3->4}
*)
конечно без гарантии ...
Редактировать
Здесь у вас есть некоторый код для экспериментов с использованием различных взвешенных матриц смежности
adj = {{\[Infinity], 1, 1, 1, 1}, {1, \[Infinity], 2, 2, 2},
{1, 2, \[Infinity], 2, 2}, {1, 2, 2, \[Infinity], 2},
{1, 2, 2, 2, \[Infinity]}}
g = WeightedAdjacencyGraph[adj];
g = WeightedAdjacencyGraph[adj, VertexShapeFunction -> "Name",
EdgeLabels ->
MapThread[
Rule, {EdgeList@g, AbsoluteOptions[g, EdgeWeight] /. {_ -> x_} -> x}],
GraphHighlight -> FindEdgeCover[g]]
Примечание: код совсем не хорош, но я не смог найти способ использовать EdgeLabels -> “EdgeWeight”
. Я разместил this question
, чтобы посмотреть, сможет ли кто-нибудь это сделать.