private void FindCircuitDfs(Node currentNode) { if (Done) { return; } if (currentNode == StartNode && VisitedEdges.Count > 0) { Done = true; return; } List <Edge> adjEdges = Graph.GetEdges(currentNode); adjEdges = adjEdges.Where(e => VisitedEdges.All(ve => ve != e) && VisitedNodes.All(vn => vn != e.OtherNode(currentNode))).ToList(); foreach (Edge adjEdge in adjEdges) { VisitedEdges.Add(adjEdge); Node otherNode = adjEdge.OtherNode(currentNode); VisitedNodes.Add(otherNode); FindCircuitDfs(otherNode); if (Done) { return; } VisitedNodes.Remove(otherNode); VisitedEdges.Remove(adjEdge); } }
public void ExplorePieceDfs(Node conNode, Edge edge, List <Edge> piece) { piece.Add(edge); VisitedEdges.Add(edge); Node otherNode = edge.OtherNode(conNode); if (SubGraph.Nodes.Contains(otherNode)) { return; } foreach (Edge source in MainGraph.GetEdges(otherNode).Where(e => !VisitedEdges.Contains(e))) { ExplorePieceDfs(otherNode, source, piece); } }