Ejemplo n.º 1
0
        private Edge FindNextEdge(Node currentNode)
        {
            var bestNodeName = UnusedEdges.FindAll(e => e.StartNode == currentNode || e.EndNode == currentNode)
                               .Min(e => (e.StartNode == currentNode) ? e.EndNode.Name : e.StartNode.Name);
            Edge bestEdge = UnusedEdges.FirstOrDefault(e => (e.StartNode == currentNode && e.EndNode.Name == bestNodeName) || (e.EndNode == currentNode && e.StartNode.Name == bestNodeName));

            bestEdge = FixEdgeDirection(bestEdge, currentNode);
            return(bestEdge);
        }
Ejemplo n.º 2
0
        private List <Edge> FindCycle(Node startingNode)
        {
            List <Edge> cycle = new List <Edge>();
            Edge        nextEdge;
            Node        lastNode = startingNode;

            do
            {
                nextEdge = FindNextEdge(lastNode);
                cycle.Add(nextEdge);
                UnusedEdges.RemoveAll(ue => ue.Number == nextEdge.Number);
                UsedEdges.Add(nextEdge);
                lastNode = lastNode == nextEdge.StartNode ? nextEdge.EndNode : nextEdge.StartNode;
            } while (lastNode != startingNode);
            return(cycle);
        }