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);
            }
        }