Esempio n. 1
0
        public void OneEdgeTest()
        {
            var edges = new List <DirectedEdge <int> >()
            {
                new DirectedEdge <int>(new GraphNode <int>(1), new GraphNode <int>(2))
            };

            var graph    = new DirectedGraph <int>(edges);
            var topOrder = new TopologicalOrdering <int>(graph);

            Assert.Equal(new [] { 2, 1 }, topOrder.GetTopologicalOrdering());
        }
Esempio n. 2
0
        public void NoOrderTest()
        {
            var node0 = new GraphNode <int>(0);
            var node1 = new GraphNode <int>(1);

            var edges = new List <DirectedEdge <int> >()
            {
                new DirectedEdge <int>(node1, node0),
                new DirectedEdge <int>(node0, node1),
            };

            var graph    = new DirectedGraph <int>(edges);
            var topOrder = new TopologicalOrdering <int>(graph);

            Assert.Equal(new int[] { }, topOrder.GetTopologicalOrdering());
        }
Esempio n. 3
0
        public void FourEdgeTest()
        {
            var node0 = new GraphNode <int>(0);
            var node1 = new GraphNode <int>(1);
            var node2 = new GraphNode <int>(2);
            var node3 = new GraphNode <int>(3);

            var edges = new List <DirectedEdge <int> >()
            {
                new DirectedEdge <int>(node1, node0),
                new DirectedEdge <int>(node2, node0),
                new DirectedEdge <int>(node3, node1),
                new DirectedEdge <int>(node3, node2),
            };

            var graph    = new DirectedGraph <int>(edges);
            var topOrder = new TopologicalOrdering <int>(graph);

            Assert.Equal(new[] { 0, 1, 2, 3 }, topOrder.GetTopologicalOrdering());
        }
Esempio n. 4
0
        //https://leetcode.com/problems/course-schedule-ii/
        public int[] FindOrder(int numCourses, int[][] prerequisites)
        {
            var nodes = new List <GraphNode <int> >(numCourses);

            for (var i = 0; i < numCourses; i++)
            {
                nodes.Add(new GraphNode <int>(i));
            }

            var edges = new List <DirectedEdge <int> >(prerequisites.GetLength(0));

            for (var i = 0; i < prerequisites.GetLength(0); i++)
            {
                edges.Add(new DirectedEdge <int>(nodes[prerequisites[i][0]], nodes[prerequisites[i][1]]));
            }

            var diGraph = new DirectedGraph <int>(nodes, edges);

            var topSorter = new TopologicalOrdering <int>(diGraph);

            return(topSorter.GetTopologicalOrdering()?.ToArray());
        }