示例#1
0
    void Start()
    {
        //SymbolGraph sg = new SymbolGraph(txt);
        //Graph graph = sg.Graph();

        //string source = "JFK";  //输入一个顶点名并,用于获得该顶点相连顶点链表
        //if (sg.Contains(source))
        //{
        //    int s = sg.IndexOf(source);
        //    foreach (int v in graph.Adj(s))
        //    {
        //        print("   " + sg.NameOf(v));
        //    }
        //}
        //else print("input not contain '" + source + "'");

        SymbolGraph sg    = new SymbolGraph(txt.text, new char[] { '/' });
        Graph       graph = sg.Graph();

        string source = "2 Days in the Valley (1996)";  //输入一个顶点名并,用于获得该顶点相连顶点链表

        if (sg.Contains(source))
        {
            int s = sg.IndexOf(source);
            foreach (int v in graph.Adj(s))
            {
                print("   " + sg.NameOf(v));
            }
        }
        else
        {
            print("input not contain '" + source + "'");
        }
    }
示例#2
0
        public void ON_GetEdgeData_WHEN_Vertices_Exist_But_Edge_Does_Not_Exist_SHOULD_Throw_KeyNotFoundException()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J);
            // Act
            var _ = uut.GetEdgeData("B", "A");
            // Assert handled by expected exception
        }
示例#3
0
        public void ON_ContainsVertex_WHEN_SymbolComparer_Set_To_InvariantCulture_AND_Vertex_Lower_Case_SHOULD_Return_False()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCulture);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination, TestEdgesFactory.DefinitionSet.PathA2J);
            // Act
            var res = uut.ContainsVertex("a");

            // Assert
            Assert.IsFalse(res);
        }
示例#4
0
        internal static SET <string> getAdjacents(SymbolGraph sg, string vertice)
        {
            SET <string> set = new SET <string>();
            Graph        g   = sg.G;
            int          s   = sg.Index(vertice);

            foreach (int v in g.Adj(s))
            {
                set.Add(sg.Name(v));
            }
            return(set);
        }
示例#5
0
        public void ON_GetEdgeData_WHEN_Edge_Exists_SHOULD_Return_Edge_Data()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J);
            // Act
            var data = uut.GetEdgeData("C", "D");

            // Assert
            Assert.AreEqual("CD", data);
        }
        public SymbolGraphTest()
        {
            KeyValuePair <String, String>[] graph = new KeyValuePair <String, String>[5]
            {
                new KeyValuePair <String, String>("MG", "SP"),
                new KeyValuePair <String, String>("MG", "RJ"),
                new KeyValuePair <String, String>("MG", "ES"),
                new KeyValuePair <String, String>("SP", "RS"),
                new KeyValuePair <String, String>("RJ", "RS")
            };

            this._symbolGraph = SymbolGraph.Create(graph);
        }
示例#7
0
        public void ON_GetCompacted_WHEN_Edges_Filtered_Out_SHOULD_Return_Graph_With_All_Not_Filtered_Edges_Source_Graph_Edges()
        {
            // Arrange
            var source = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(source, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J | TestEdgesFactory.DefinitionSet.PathsFromQRS |
                                    TestEdgesFactory.DefinitionSet.SelfT);
            // Act
            var uut = source.GetCompacted().Data;

            // Assert
            CollectionAssert.AreEquivalent(source.GetEdges().ToArray(), uut.GetEdges().ToArray());
        }
示例#8
0
        public static SymbolGraph GenerateSymbolGraph(string file, bool allowSelfLoop = true, bool allowParallelEdges = true)
        {
            var lines = File.ReadAllLines(file);
            var input = new List <Tuple <string, string> >();

            foreach (var line in lines)
            {
                var connection = line.Split(' ');
                input.Add(new Tuple <string, string>(connection[0], connection[1]));
            }
            var symbolGraph = new SymbolGraph(input, allowSelfLoop, allowParallelEdges);

            return(symbolGraph);
        }
示例#9
0
        public void ON_ConvertPathToEdgeData_WHEN_Path_Does_Not_Exist_SHOULD_Throw_Exception()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J | TestEdgesFactory.DefinitionSet.JA);

            uut.Freeze();

            // Act
            var _ = uut.ConvertPathToEdgeData("ADJF".AsStrings()).ToArray();
            // Assert handled by expected exception.
        }
示例#10
0
        public void ON_ConvertPathToEdgeData_WHEN_Path_Exists_SHOULD_Return_Path_Edge_Data()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J | TestEdgesFactory.DefinitionSet.JA);

            uut.Freeze();

            // Act
            var edges = uut.ConvertPathToEdgeData("ABCD".AsStrings()).ToArray();

            // Assert
            CollectionAssert.AreEqual(EnumerableExtensions.Enumerate("AB", "BC", "CD").ToArray(), edges.ToArray());
        }
示例#11
0
        public void ON_GetPathTo_WHEN_Vertex_Does_Not_Exist_SHOULD_Return_Empty()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J);

            uut.Freeze();

            var map = uut.GetSearchMapFrom("@");
            // Act
            var any = map.GetPathTo("!").Any();

            // Assert
            Assert.IsFalse(any);
        }
示例#12
0
        public void ON_GetPathTo_WHEN_Vertex_Self_Looped_SHOULD_Return_Buckle_Path()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J | TestEdgesFactory.DefinitionSet.JA | TestEdgesFactory.DefinitionSet.SelfA2J);

            uut.Freeze();

            var map = uut.GetSearchMapFrom("B");
            // Act
            var path = map.GetPathTo("B").ToArray();

            // Assert
            CollectionAssert.AreEqual("BB".AsStrings().ToArray(), path);
        }
示例#13
0
        public void ON_GetPathTo_WHEN_Single_Path_Exist_SHOULD_Return_Proper_Path()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination, TestEdgesFactory.DefinitionSet.PathA2J);

            uut.Freeze();

            var map = uut.GetSearchMapFrom("A");

            // Act
            var path = map.GetPathTo("J").ToArray();

            // Assert
            CollectionAssert.AreEqual(TestEdgesFactory.VertexSymbolsA2J, path);
        }
示例#14
0
        public void ON_GetPathTo_WHEN_Multiple_Paths_SHOULD_Return_Shortest_Path()
        {
            // Arrange
            var uut = new SymbolGraph <string, string>(40, StringComparer.InvariantCultureIgnoreCase);

            TestEdgesFactory.Define(uut, v => v.Source + v.Destination,
                                    TestEdgesFactory.DefinitionSet.PathA2J | TestEdgesFactory.DefinitionSet.EMFNBIGD);

            uut.Freeze();

            var map = uut.GetSearchMapFrom("A");
            // Act
            var path = map.GetPathTo("J").ToArray();

            // Assert
            CollectionAssert.AreEqual("ABIJ".AsStrings().ToArray(), path);
        }
示例#15
0
    /**/ public static void main(string[] strarr)
    {
        string      str         = strarr[0];
        string      str2        = strarr[1];
        string      str3        = strarr[2];
        SymbolGraph symbolGraph = new SymbolGraph(str, str2);
        Graph       g           = symbolGraph.G();

        if (!symbolGraph.contains(str3))
        {
            StdOut.println(new StringBuilder().append(str3).append(" not in database.").toString());
            return;
        }
        int i = symbolGraph.index(str3);
        BreadthFirstPaths breadthFirstPaths = new BreadthFirstPaths(g, i);

        while (!StdIn.isEmpty())
        {
            string str4 = StdIn.readLine();
            if (symbolGraph.contains(str4))
            {
                int i2 = symbolGraph.index(str4);
                if (breadthFirstPaths.hasPathTo(i2))
                {
                    Iterator iterator = breadthFirstPaths.pathTo(i2).iterator();
                    while (iterator.hasNext())
                    {
                        int i3 = ((Integer)iterator.next()).intValue();
                        StdOut.println(new StringBuilder().append("   ").append(symbolGraph.name(i3)).toString());
                    }
                }
                else
                {
                    StdOut.println("Not connected");
                }
            }
            else
            {
                StdOut.println("   Not in database.");
            }
        }
    }
示例#16
0
        public void SymbolGraphTest()
        {
            string sep = " ";
            //StreamReader sr;
            FileStream sr;
            // using (sr = new FileStream(@"E:\Study\ALG2017\ALGRKC\data\routes.txt", FileMode.Open))
            //{
            string fileName = @"E:\Study\ALG2017\ALGRKC\data\routes.txt";

            SymbolGraph sg = new SymbolGraph(fileName, sep);
            Graph       g  = sg.G();

            string source;

            source = "JFK";

            foreach (int v in g.AdjList(sg.Index(source)))
            {
                Console.WriteLine(sg.KeyName(v));
            }
            Console.WriteLine();
            Console.WriteLine();


            fileName = @"E:\Study\ALG2017\ALGRKC\data\movies.txt";
            sep      = @"/";
            sg       = new SymbolGraph(fileName, sep);
            g        = sg.G();

            source = "Bacon, Kevin";

            foreach (int v in g.AdjList(sg.Index(source)))
            {
                Console.WriteLine(sg.KeyName(v));
            }
            Console.WriteLine();



            //}
        }
示例#17
0
    // Start is called before the first frame update
    void Start()
    {
        string alg1 = "Shell";
        string alg2 = "Merge";

        int N = 10000;
        int T = 100;

        double t1 = SortCompare.timeRandomInput(alg1, N, T);
        double t2 = SortCompare.timeRandomInput(alg2, N, T);

        print(t1);
        print(t2);

        print($"For {N} random Doubles\n");
        print($"{alg2} is {t1/t2} times faster than {alg1}\n");

        var g = new Graph(13);

        g.addEdge(0, 5);
        g.addEdge(4, 3);
        g.addEdge(0, 1);
        g.addEdge(9, 12);
        g.addEdge(6, 4);
        g.addEdge(5, 4);
        g.addEdge(0, 2);
        g.addEdge(11, 12);
        g.addEdge(9, 10);
        g.addEdge(0, 6);
        g.addEdge(7, 8);
        g.addEdge(9, 11);
        g.addEdge(5, 3);

        var cc = new ConnectedComponent(g);

        print(cc.getCount());

        string str = "jfk,mco\nord,den\nord,hou\ndfw,phx\njfk,atl\nord,dfw\nord,phx\natl,hou\nden,phx\nphx,lax\njfk,ord\nden,las\ndfw,hou\nord,atl\nlas,lax\natl,mco\nhou,mco\nlas,phx";
        //print(str);
        var sg = new SymbolGraph(str, ',');
    }
示例#18
0
        public void SymbolGraphTest1()
        {
            // NOTE: the file has to be in the current working directory for unit tests
            string      usastates = "us-state-neighbors.txt";
            SymbolGraph sg;
            Graph       G;

            try
            {
                sg = new SymbolGraph(usastates, " ");
            }
            catch (Exception ex)
            {
                Assert.Fail(string.Format("Symbol graph construction error: {0}", ex.Message));
                return;
            }
            G = sg.G;
            string state = "HI";

            Assert.IsTrue(sg.Contains(state));
            string[]     neighbors = new string[] { "CA" };
            SET <string> expected  = new SET <string>(neighbors);
            SET <string> actual    = TestHelpers.getAdjacents(sg, state);

            Assert.AreEqual(actual, expected);

            state     = "CA";
            neighbors = new string[] { "OR", "NV", "AZ", "HI" };
            expected  = new SET <string>(neighbors);
            actual    = TestHelpers.getAdjacents(sg, state);
            Assert.AreEqual(actual, expected);

            state     = "IA";
            neighbors = new string[] { "MN", "WI", "MO", "NE", "SD", "IL" };
            expected  = new SET <string>(neighbors);
            actual    = TestHelpers.getAdjacents(sg, state);
            Assert.AreEqual(actual, expected);

            // more ...
        }
示例#19
0
    void Start()
    {
        string      source = "JFK";
        SymbolGraph sg     = new SymbolGraph(txt);
        Graph       G      = sg.Graph();

        if (!sg.Contains(source))
        {
            print(source + " not in database.");
            return;
        }

        int s = sg.IndexOf(source);
        BreadthFirstPaths bfs = new BreadthFirstPaths(G, s);

        string sink = "DFW";

        if (sg.Contains(sink))
        {
            int t = sg.IndexOf(sink);
            if (bfs.hasPathTo(t))
            {
                foreach (int v in bfs.pathTo(t))
                {
                    print("   " + sg.NameOf(v));
                }
            }
            else
            {
                print("Not connected");
            }
        }
        else
        {
            print("   Not in database.");
        }
    }
示例#20
0
        public void Run()
        {
            Console.WriteLine("Choose file:");   // Prompt
            Console.WriteLine("1 - routes.txt"); // Prompt
            Console.WriteLine("2 - movies.txt"); // Prompt
            //Console.WriteLine("3 - largeG.zip"); // Prompt
            Console.WriteLine("or quit");        // Prompt

            var           fileNumber = Console.ReadLine();
            string        fileName;
            char          delimiter;
            List <string> names;

            switch (fileNumber)
            {
            case "1":
                fileName  = "routes.txt";
                delimiter = '\u0020';
                names     = new List <string> {
                    "JFK", "LAX"
                };
                break;

            case "2":
                fileName  = "movies.txt";
                delimiter = '/';
                names     = new List <string> {
                    "Tin Men (1987)", "Bacon, Kevin"
                };
                break;

            //case "3":
            //    fieName = "largeG.zip";
            //    break;
            case "quit":
                return;

            default:
                return;
            }


            var @in   = new In($"Files\\Graphs\\{fileName}");
            var lines = !fileName.EndsWith("zip") ? @in.ReadAllLines() : @in.ReadAllLinesFromZip();

            var sg    = new SymbolGraph(lines, delimiter);
            var graph = sg.G;


            foreach (var name in names)
            {
                Console.WriteLine($"{name}");
                if (sg.Contains(name))
                {
                    var s = sg.Index(name);
                    foreach (int v in graph.Adj(s))
                    {
                        Console.WriteLine($"   {sg.Name(v)}");
                    }
                }
                else
                {
                    Console.WriteLine($"input not contain '{name}'");
                }
            }
            Console.ReadLine();
        }
        public void Testing()
        {
            var graph = new UndirectedGraph(13);

            graph.InsertEdge(0, 5);
            graph.InsertEdge(4, 3);
            graph.InsertEdge(0, 1);
            graph.InsertEdge(9, 12);
            graph.InsertEdge(6, 4);
            graph.InsertEdge(5, 4);
            graph.InsertEdge(0, 2);
            graph.InsertEdge(11, 12);
            graph.InsertEdge(9, 10);
            graph.InsertEdge(0, 6);
            graph.InsertEdge(7, 8);
            graph.InsertEdge(9, 11);
            graph.InsertEdge(5, 3);

            var degree    = graph.VertexDegree(5);
            var maxDegree = graph.GraphMaxVertexDegree();
            var avgDegree = graph.GraphAverageVertexDegree();
            var selfLoops = graph.GraphNumberOfSelfLoops();

            var graph2 = new UndirectedGraph(6);

            graph2.InsertEdge(0, 5);
            graph2.InsertEdge(2, 4);
            graph2.InsertEdge(2, 3);
            graph2.InsertEdge(1, 2);
            graph2.InsertEdge(0, 1);
            graph2.InsertEdge(3, 4);
            graph2.InsertEdge(3, 5);
            graph2.InsertEdge(0, 2);

            var depthFirstSearch      = new DepthFirstSearch(graph2, 0);
            var depthFirstSearchCount = depthFirstSearch.Count();

            var depthFirstSearchTest0 = depthFirstSearch.Marked(0);
            var depthFirstSearchTest1 = depthFirstSearch.Marked(1);
            var depthFirstSearchTest2 = depthFirstSearch.Marked(2);
            var depthFirstSearchTest3 = depthFirstSearch.Marked(3);
            var depthFirstSearchTest4 = depthFirstSearch.Marked(4);
            var depthFirstSearchTest5 = depthFirstSearch.Marked(5);

            var depthFirstSearchNonRecursive      = new DepthFirstSearchNonRecursive(graph2, 0);
            var depthFirstSearchNonRecursiveCount = depthFirstSearchNonRecursive.Count();

            var depthFirstSearchNonRecursiveTest0 = depthFirstSearchNonRecursive.Marked(0);
            var depthFirstSearchNonRecursiveTest1 = depthFirstSearchNonRecursive.Marked(1);
            var depthFirstSearchNonRecursiveTest2 = depthFirstSearchNonRecursive.Marked(2);
            var depthFirstSearchNonRecursiveTest3 = depthFirstSearchNonRecursive.Marked(3);
            var depthFirstSearchNonRecursiveTest4 = depthFirstSearchNonRecursive.Marked(4);
            var depthFirstSearchNonRecursiveTest5 = depthFirstSearchNonRecursive.Marked(5);

            var depthFirstSearchTestConnected = depthFirstSearchCount == graph2.Vertices ? "Connected" : "NOT Connected";

            var depthFirstPath     = new DepthFirstPaths(graph2, 0);
            var depthFirstPathTest = depthFirstPath.PathTo(4);

            var breadthFirstSearch      = new BreadthFirstSearch(graph2, 0);
            var breadthFirstSearchCount = breadthFirstSearch.Count();

            var breadthFirstSearchTest0 = breadthFirstSearch.Marked(0);
            var breadthFirstSearchTest1 = breadthFirstSearch.Marked(1);
            var breadthFirstSearchTest2 = breadthFirstSearch.Marked(2);
            var breadthFirstSearchTest3 = breadthFirstSearch.Marked(3);
            var breadthFirstSearchTest4 = breadthFirstSearch.Marked(4);
            var breadthFirstSearchTest5 = breadthFirstSearch.Marked(5);

            var breadthFirstSearchTestConnected = breadthFirstSearchCount == graph2.Vertices ? "Connected" : "NOT Connected";

            var breadthFirstPath     = new BreadthFirstPaths(graph2, 0);
            var breadthFirstPathTest = breadthFirstPath.PathTo(4);

            var depthFirstComponents = new DepthFirstComponents(graph);

            var depthFirstComponentsTest0 = depthFirstComponents.IsConnected(0, 7);
            var depthFirstComponentsTest1 = depthFirstComponents.IsConnected(0, 6);
            var depthFirstComponentsTest2 = depthFirstComponents.IsConnected(7, 9);
            var depthFirstComponentsTest3 = depthFirstComponents.IsConnected(7, 8);
            var depthFirstComponentsTest4 = depthFirstComponents.IsConnected(9, 0);
            var depthFirstComponentsTest5 = depthFirstComponents.IsConnected(9, 12);

            var depthFirstCycle     = new DepthFirstCycle(graph);
            var depthFirstCycleTest = depthFirstCycle.HasCycle();

            var depthFirstBipartite     = new DepthFirstBipartite(graph);
            var depthFirstBipartiteTest = depthFirstBipartite.IsBipartite();

            var symbolGraph = new SymbolGraph();

            symbolGraph.Insert(new [] { "JFK", "MCO" });
            symbolGraph.Insert(new[] { "ORD", "DEN" });
            symbolGraph.Insert(new[] { "ORD", "HOU" });
            symbolGraph.Insert(new[] { "DFW", "PHX" });
            symbolGraph.Insert(new[] { "JFK", "ATL" });
            symbolGraph.Insert(new[] { "ORD", "DFW" });
            symbolGraph.Insert(new[] { "ORD", "PHX" });
            symbolGraph.Insert(new[] { "ATL", "HOU" });
            symbolGraph.Insert(new[] { "DEN", "PHX" });
            symbolGraph.Insert(new[] { "PHX", "LAX" });
            symbolGraph.Insert(new[] { "JFK", "ORD" });
            symbolGraph.Insert(new[] { "DEN", "LAS" });
            symbolGraph.Insert(new[] { "DFW", "HOU" });
            symbolGraph.Insert(new[] { "ORD", "ATL" });
            symbolGraph.Insert(new[] { "LAS", "LAX" });
            symbolGraph.Insert(new[] { "ATL", "MCO" });
            symbolGraph.Insert(new[] { "HOU", "MCO" });
            symbolGraph.Insert(new[] { "LAS", "PHX" });

            symbolGraph.Build();

            var symbolGraphTest0 = symbolGraph.Contains("LAS");
            var symbolGraphTest1 = symbolGraph.Contains("MOO");
            var symbolGraphTest2 = symbolGraph.Index("LAX");
            var symbolGraphTest3 = symbolGraph.Name(symbolGraphTest2);

            var symbolGraph2 = new SymbolGraphDegreesOfSeparation();

            symbolGraph2.Insert(new[] { "JFK", "MCO" });
            symbolGraph2.Insert(new[] { "ORD", "DEN" });
            symbolGraph2.Insert(new[] { "ORD", "HOU" });
            symbolGraph2.Insert(new[] { "DFW", "PHX" });
            symbolGraph2.Insert(new[] { "JFK", "ATL" });
            symbolGraph2.Insert(new[] { "ORD", "DFW" });
            symbolGraph2.Insert(new[] { "ORD", "PHX" });
            symbolGraph2.Insert(new[] { "ATL", "HOU" });
            symbolGraph2.Insert(new[] { "DEN", "PHX" });
            symbolGraph2.Insert(new[] { "PHX", "LAX" });
            symbolGraph2.Insert(new[] { "JFK", "ORD" });
            symbolGraph2.Insert(new[] { "DEN", "LAS" });
            symbolGraph2.Insert(new[] { "DFW", "HOU" });
            symbolGraph2.Insert(new[] { "ORD", "ATL" });
            symbolGraph2.Insert(new[] { "LAS", "LAX" });
            symbolGraph2.Insert(new[] { "ATL", "MCO" });
            symbolGraph2.Insert(new[] { "HOU", "MCO" });
            symbolGraph2.Insert(new[] { "LAS", "PHX" });
            symbolGraph2.Insert(new[] { "ZZZ", "YYY" });

            symbolGraph2.Build();

            var symbolGraph2Test0 = symbolGraph2.IsConnected("JFK", "LAS");
            var symbolGraph2Test1 = symbolGraph2.IsConnected("JFK", "DFW");
            var symbolGraph2Test2 = symbolGraph2.IsConnected("HOU", "YYY");
        }
        public void Testing()
        {
            var graph = new DirectedGraph(13);

            graph.InsertEdge(4, 2);
            graph.InsertEdge(2, 3);
            graph.InsertEdge(3, 2);
            graph.InsertEdge(6, 0);
            graph.InsertEdge(0, 1);
            graph.InsertEdge(2, 0);
            graph.InsertEdge(11, 12);
            graph.InsertEdge(12, 9);
            graph.InsertEdge(9, 10);
            graph.InsertEdge(9, 11);
            graph.InsertEdge(8, 9);
            graph.InsertEdge(10, 12);
            graph.InsertEdge(11, 4);
            graph.InsertEdge(4, 3);
            graph.InsertEdge(3, 5);
            graph.InsertEdge(7, 8);
            graph.InsertEdge(8, 7);
            graph.InsertEdge(5, 4);
            graph.InsertEdge(0, 5);
            graph.InsertEdge(6, 4);
            graph.InsertEdge(6, 9);
            graph.InsertEdge(7, 6);

            var vertexOutDegree = graph.VertexOutDegree(6);
            var vertexInDegre   = graph.VertexInDegree(6);
            var graphReveresed  = graph.Reverse();

            var depthFirstSearch      = new DepthFirstSearch(graph, 0);
            var depthFirstSearchCount = depthFirstSearch.Count();

            var depthFirstSearchTest0 = depthFirstSearch.Marked(0);
            var depthFirstSearchTest1 = depthFirstSearch.Marked(1);
            var depthFirstSearchTest2 = depthFirstSearch.Marked(2);
            var depthFirstSearchTest3 = depthFirstSearch.Marked(3);
            var depthFirstSearchTest4 = depthFirstSearch.Marked(4);
            var depthFirstSearchTest5 = depthFirstSearch.Marked(5);
            var depthFirstSearchTest6 = depthFirstSearch.Marked(6);

            var depthFirstSearchTestConnected = depthFirstSearchCount == graph.Vertices ? "Connected" : "NOT Connected";

            var depthFirstPath     = new DepthFirstPaths(graph, 0);
            var depthFirstPathTest = depthFirstPath.PathTo(2);

            var breadthFirstSearch      = new BreadthFirstSearch(graph, 0);
            var breadthFirstSearchCount = breadthFirstSearch.Count();

            var breadthFirstSearchTest0 = breadthFirstSearch.Marked(0);
            var breadthFirstSearchTest1 = breadthFirstSearch.Marked(1);
            var breadthFirstSearchTest2 = breadthFirstSearch.Marked(2);
            var breadthFirstSearchTest3 = breadthFirstSearch.Marked(3);
            var breadthFirstSearchTest4 = breadthFirstSearch.Marked(4);
            var breadthFirstSearchTest5 = breadthFirstSearch.Marked(5);
            var breadthFirstSearchTest6 = breadthFirstSearch.Marked(6);

            var breadthFirstSearchTestConnected = breadthFirstSearchCount == graph.Vertices ? "Connected" : "NOT Connected";

            var breadthFirstPath     = new BreadthFirstPaths(graph, 0);
            var breadthFirstPathTest = breadthFirstPath.PathTo(2);

            var depthFirstCycle      = new DepthFirstCycle(graph);
            var depthFirstCycleTest0 = depthFirstCycle.HasCycle();
            var depthFirstCycleTest1 = depthFirstCycle.Cycle();

            var graph2 = new DirectedGraph(13);

            graph2.InsertEdge(2, 3);
            graph2.InsertEdge(0, 6);
            graph2.InsertEdge(0, 1);
            graph2.InsertEdge(2, 0);
            graph2.InsertEdge(11, 12);
            graph2.InsertEdge(9, 12);
            graph2.InsertEdge(9, 10);
            graph2.InsertEdge(9, 11);
            graph2.InsertEdge(3, 5);
            graph2.InsertEdge(8, 7);
            graph2.InsertEdge(5, 4);
            graph2.InsertEdge(0, 5);
            graph2.InsertEdge(6, 4);
            graph2.InsertEdge(6, 9);
            graph2.InsertEdge(7, 6);

            var depthFirstCycle2      = new DepthFirstCycle(graph2);
            var depthFirstCycle2Test0 = depthFirstCycle2.HasCycle();
            var depthFirstCycle2Test1 = depthFirstCycle2.Cycle();

            var depthFirstOrder = new DepthFirstOrder(graph2);

            var depthFirstOrderTest0 = depthFirstOrder.PreOrder();
            var depthFirstOrderTest1 = depthFirstOrder.PostOrder();
            var depthFirstOrderTest2 = depthFirstOrder.ReversePostOrder();

            var symbolGraph = new SymbolGraph();

            symbolGraph.Insert(new[] { "JFK", "MCO" });
            symbolGraph.Insert(new[] { "ORD", "DEN" });
            symbolGraph.Insert(new[] { "ORD", "HOU" });
            symbolGraph.Insert(new[] { "DFW", "PHX" });
            symbolGraph.Insert(new[] { "JFK", "ATL" });
            symbolGraph.Insert(new[] { "ORD", "DFW" });
            symbolGraph.Insert(new[] { "ORD", "PHX" });
            symbolGraph.Insert(new[] { "ATL", "HOU" });
            symbolGraph.Insert(new[] { "DEN", "PHX" });
            symbolGraph.Insert(new[] { "PHX", "LAX" });
            symbolGraph.Insert(new[] { "JFK", "ORD" });
            symbolGraph.Insert(new[] { "DEN", "LAS" });
            symbolGraph.Insert(new[] { "DFW", "HOU" });
            symbolGraph.Insert(new[] { "ORD", "ATL" });
            symbolGraph.Insert(new[] { "LAS", "LAX" });
            symbolGraph.Insert(new[] { "ATL", "MCO" });
            symbolGraph.Insert(new[] { "HOU", "MCO" });
            symbolGraph.Insert(new[] { "LAS", "PHX" });

            symbolGraph.Build();

            var symbolGraphTest0 = symbolGraph.Contains("LAS");
            var symbolGraphTest1 = symbolGraph.Contains("MOO");
            var symbolGraphTest2 = symbolGraph.Index("LAX");
            var symbolGraphTest3 = symbolGraph.Name(symbolGraphTest2);

            var symbolGraph2 = new SymbolGraph();

            symbolGraph2.Insert(new[] { "Algorithms", "Theoretical CS", "Databases", "Scientific Computing" });
            symbolGraph2.Insert(new[] { "Introduction to CS", "Advanced Programming", "Algorithms" });
            symbolGraph2.Insert(new[] { "Advanced Programming", "Scientific Computing" });
            symbolGraph2.Insert(new[] { "Scientific Computing", "Computational Biology" });
            symbolGraph2.Insert(new[] { "Theoretical CS", "Computational Biology", "Artificial Intelligence" });
            symbolGraph2.Insert(new[] { "Linear Algebra", "Theoretical CS" });
            symbolGraph2.Insert(new[] { "Calculus", "Linear Algebra" });
            symbolGraph2.Insert(new[] { "Artificial Intelligence", "Neural Networks", "Robotics", "Machine Learning" });
            symbolGraph2.Insert(new[] { "Machine Learning", "Neural Networks" });

            symbolGraph2.Build();

            var topologicalSort   = new TopologicalSort(symbolGraph2.Graph());
            var topologicalSorted = new List <string>();

            foreach (var item in topologicalSort.Order)
            {
                topologicalSorted.Add(symbolGraph2.Name(item));
            }

            var depthFirstComponents = new DepthFirstComponents(graph);

            var depthFirstComponentsTest0 = depthFirstComponents.IsStronglyConnected(1, 7);
            var depthFirstComponentsTest1 = depthFirstComponents.IsStronglyConnected(0, 2);
            var depthFirstComponentsTest2 = depthFirstComponents.IsStronglyConnected(2, 7);
            var depthFirstComponentsTest3 = depthFirstComponents.IsStronglyConnected(9, 12);
            var depthFirstComponentsTest4 = depthFirstComponents.IsStronglyConnected(6, 8);
            var depthFirstComponentsTest5 = depthFirstComponents.IsStronglyConnected(7, 8);
        }