private Node Traverse(Node node) { Arc matchedArc = matching.MatchedArc(node); if (IsRed(node)) { foreach (var arc in Graph.Arcs(node)) { if (arc != matchedArc) { Node y = Graph.Other(arc, node); if (!parentArc.ContainsKey(y)) { parentArc[y] = arc; if (!matching.HasNode(y)) { return(y); } Node result = Traverse(y); if (result != Node.Invalid) { return(result); } } } } } else { Node y = Graph.Other(matchedArc, node); if (!parentArc.ContainsKey(y)) { parentArc[y] = matchedArc; Node result = Traverse(y); if (result != Node.Invalid) { return(result); } } } return(Node.Invalid); }
private Node Traverse(Node node) { Arc arc = matching.MatchedArc(node); if (IsRed(node)) { foreach (Arc item in Graph.Arcs(node, ArcFilter.All)) { if (item != arc) { Node node2 = Graph.Other(item, node); if (!parentArc.ContainsKey(node2)) { parentArc[node2] = item; if (!matching.HasNode(node2)) { return(node2); } Node node3 = Traverse(node2); if (node3 != Node.Invalid) { return(node3); } } } } } else { Node node4 = Graph.Other(arc, node); if (!parentArc.ContainsKey(node4)) { parentArc[node4] = arc; Node node5 = Traverse(node4); if (node5 != Node.Invalid) { return(node5); } } } return(Node.Invalid); }