コード例 #1
0
ファイル: Digraph.cs プロジェクト: xeekst/Algorithm-4th
        public Digraph Reverse()
        {
            Digraph d = new Digraph(_vertices);

            for (int v = 0; v < _adjs.Length; v++)
            {
                foreach (int w in _adjs[v])
                {
                    d.AddEdge(w, v);
                }
            }
            return(d);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: xeekst/Algorithm-4th
        static void Main(string[] args)
        {
            Digraph g = new Digraph(9);

            //g.Visualize()
            g.AddEdge(0, 2);
            g.AddEdge(0, 6);
            g.AddEdge(1, 0);
            g.AddEdge(2, 3);
            g.AddEdge(2, 4);
            g.AddEdge(3, 4);
            g.AddEdge(3, 2);
            g.AddEdge(4, 5);
            g.AddEdge(4, 6);
            g.AddEdge(5, 0);
            g.AddEdge(5, 3);
            g.AddEdge(6, 7);
            g.AddEdge(7, 8);
            g.AddEdge(8, 7);

            var topo = new Topological(g);

            Console.WriteLine("Order: ");
            foreach (int s in topo.Order)
            {
                Console.Write(s + " ");
            }

            Console.WriteLine("\nReverOrder: ");
            DepthFirstOrder order = new DepthFirstOrder(g.Reverse());

            foreach (int s in order.Reverse)
            {
                Console.Write(s + " ");
            }

            KosarajuSCC ks = new KosarajuSCC(g);

            Console.WriteLine($"\nks:{ks.Count()}");
        }