The dual side of a matching is a map of the nodes to MaxMatching::DecompType, having values D
, A
and C
showing the Gallai-Edmonds decomposition of the graph. The nodes in D
induce a graph with factor-critical components, the nodes in A
form the barrier, and the nodes in C
induce a graph having a perfect matching. This decomposition can be attained by calling decomposition()
after running the algorithm.
Graph | The undirected graph type the algorithm runs on. |
#include <lemon/max_matching.h>
Public Types | |
enum | DecompType |
Indicates the Gallai-Edmonds decomposition of the graph. More... | |
Public Member Functions | |
void | init () |
void | greedyInit () |
Finds a greedy matching for initial matching. | |
template<typename MateMap > | |
void | mateMapInit (MateMap &map) |
Initialize the matching from each nodes' mate. | |
template<typename MatchingMap > | |
void | matchingMapInit (MatchingMap &map) |
Initialize the matching from a node map with the incident matching edges. | |
template<typename MatchingMap > | |
void | matchingInit (MatchingMap &map) |
Initialize the matching from the map containing the undirected matching edges. | |
void | run () |
Runs Edmonds' algorithm. | |
void | startSparse () |
Starts Edmonds' algorithm. | |
void | startDense () |
Starts Edmonds' algorithm. | |
int | size () const |
Returns the size of the actual matching stored. | |
Node | mate (const Node &node) const |
Returns the mate of a node in the actual matching. | |
UEdge | matchingEdge (const Node &node) const |
Returns the matching edge incident to the given node. | |
DecompType | decomposition (const Node &n) |
bool | barrier (const Node &n) |
template<typename MateMap > | |
void | mateMap (MateMap &map) const |
Gives back the matching in a Node of mates. | |
template<typename MatchingMap > | |
void | matchingMap (MatchingMap &map) const |
Gives back the matching in an UEdge valued Node map. | |
template<typename MatchingMap > | |
void | matching (MatchingMap &map) const |
Gives back the matching in a bool valued UEdge map. | |
template<typename DecompositionMap > | |
void | decomposition (DecompositionMap &map) const |
Returns the canonical decomposition of the graph after running the algorithm. | |
template<typename BarrierMap > | |
void | barrier (BarrierMap &barrier) |
Returns a barrier on the nodes. |
enum DecompType |
Indicates the Gallai-Edmonds decomposition of the graph, which shows an upper bound on the size of a maximum matching. The nodes with DecompType D
induce a graph with factor-critical components, the nodes in A
form the canonical barrier, and the nodes in C
induce a graph having a perfect matching.
void init | ( | ) | [inline] |
Sets the actual matching to the empty matching.
void greedyInit | ( | ) | [inline] |
For initial matchig it finds a maximal greedy matching.
void mateMapInit | ( | MateMap & | map | ) | [inline] |
Initialize the matching from a Node
valued Node
map. This map must be symmetric, i.e. if map
[u]==v then map
[v]==u must hold, and uv
will be an edge of the initial matching.
void matchingMapInit | ( | MatchingMap & | map | ) | [inline] |
Initialize the matching from an UEdge
valued Node
map. map
[v] must be an UEdge
incident to v
. This map must have the property that if g.oppositeNode
(u,map[u])==v then
,map[v])==u holds, and now some edge joining g.oppositeNode
(vu
to v
will be an edge of the matching.
void matchingInit | ( | MatchingMap & | map | ) | [inline] |
Initialize the matching from a bool
valued UEdge
map. This map must have the property that there are no two incident edges e
, f
with map
[e]==map[f]==true. The edges e
with map
[e]==true form the matching.
void run | ( | ) | [inline] |
Runs Edmonds' algorithm for sparse graphs (number of edges < 2*number of nodes), and a heuristical Edmonds' algorithm with a heuristic of postponing shrinks for dense graphs.
void startSparse | ( | ) | [inline] |
If runs the original Edmonds' algorithm.
void startDense | ( | ) | [inline] |
It runs Edmonds' algorithm with a heuristic of postponing shrinks, giving a faster algorithm for dense graphs.
int size | ( | ) | const [inline] |
Returns the size of the actual matching stored. After run() it returns the size of a maximum matching in the graph.
Node mate | ( | const Node & | node | ) | const [inline] |
Returns the mate of a node
in the actual matching. Returns INVALID if the node
is not covered by the actual matching.
UEdge matchingEdge | ( | const Node & | node | ) | const [inline] |
Returns the matching edge of a node
in the actual matching. Returns INVALID if the node
is not covered by the actual matching.
DecompType decomposition | ( | const Node & | n | ) | [inline] |
Returns the class of the node in the Edmonds-Gallai decomposition.
bool barrier | ( | const Node & | n | ) | [inline] |
Returns true when the node is in the barrier.
void mateMap | ( | MateMap & | map | ) | const [inline] |
Writes the stored matching to a Node
valued Node
map. The resulting map will be symmetric, i.e. if map
[u]==v then map
[v]==u will hold, and now uv
is an edge of the matching.
void matchingMap | ( | MatchingMap & | map | ) | const [inline] |
Writes the stored matching to an UEdge
valued Node
map. map
[v] will be an UEdge
incident to v
. This map will have the property that if g.oppositeNode
(u,map[u]) == v then map
[u]==map[v] holds, and now this edge is an edge of the matching.
void matching | ( | MatchingMap & | map | ) | const [inline] |
Writes the matching stored to a bool
valued Edge
map. This map will have the property that there are no two incident edges e
, f
with map
[e]==map[f]==true. The edges e
with map
[e]==true form the matching.
void decomposition | ( | DecompositionMap & | map | ) | const [inline] |
After calling any run methods of the class, it writes the Gallai-Edmonds canonical decomposition of the graph. map
must be a node map of DecompType 's.
void barrier | ( | BarrierMap & | barrier | ) | [inline] |
After calling any run methods of the class, it writes a canonical barrier on the nodes. The odd component number of the remaining graph minus the barrier size is a lower bound for the uncovered nodes in the graph. The map
must be a node map of bools.