Exemplo n.º 1
0
        public bool HasDirectedCycle()
        {
            DirectedGraph tempGraph = (DirectedGraph)this.Clone();

            tempGraph.ComputeStronglyConnectedComponents(null);
            IEnumerable <GraphNode> query = (from node1 in tempGraph.Nodes
                                             from node2 in tempGraph.Nodes
                                             where ((!node1.Name.Equals(node2.Name)) &&
                                                    node1.ComponentNumber == node2.ComponentNumber)
                                             select node1);

            return(query != null && query.Count() > 0);
        }
Exemplo n.º 2
0
        public bool AdditionalEdgeInducesDirectedCycle(DirectedGraphEdge additionalEdge)
        {
            DirectedGraph tempGraph = (DirectedGraph)this.Clone();

            tempGraph.AddEdge(additionalEdge);
            tempGraph.ComputeStronglyConnectedComponents(null);
            List <GraphNode> query = (from node1 in tempGraph.Nodes
                                      from node2 in tempGraph.Nodes
                                      where ((!node1.Name.Equals(node2.Name)) &&
                                             node1.ComponentNumber == node2.ComponentNumber)
                                      select node1).ToList();

            return(query != null && query.Count() > 0);
        }
Exemplo n.º 3
0
        public bool EdgeReversalInducesDirectedCycle(DirectedGraphEdge edge)
        {
            DirectedGraph tempGraph = (DirectedGraph)this.Clone();

            tempGraph.RemoveEdge(edge.From, edge.To);
            tempGraph.AddEdge(new DirectedGraphEdge(edge.To, edge.From, edge.Cost));
            tempGraph.ComputeStronglyConnectedComponents(null);
            List <GraphNode> query = (from node1 in tempGraph.Nodes
                                      from node2 in tempGraph.Nodes
                                      where ((!node1.Name.Equals(node2.Name)) &&
                                             node1.ComponentNumber == node2.ComponentNumber)
                                      select node1).ToList();

            return(query != null && query.Count() > 0);
        }