Example #1
0
        public static void EdgyTrees()
        {
            var nm    = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
            var n     = nm[0];
            var k     = nm[1];
            var graph = new Graph <double>();

            for (int i = 1; i <= n; i++)
            {
                graph.AddVertex(i);
            }

            for (int i = 1; i <= n - 1; i++)
            {
                var input = Console.ReadLine().Split().Select(Double.Parse).ToArray();
                graph.AddEdge(input[0], input[1], input[2]);
            }

            var visited    = new HashSet <double>();
            var degreeList = new List <long>();

            for (int i = 1; i <= n; i++)
            {
                if (!visited.Contains(i))
                {
                    graph.Count = 0;
                    graph.Dfs(i, visited);
                    degreeList.Add(graph.Count);
                }
            }

            var mod = new BigInteger(Math.Pow(10, 9) + 7);
            var ans = BigInteger.Zero;

            foreach (var c in degreeList)
            {
                BigInteger.DivRem(BigInteger.Add(ans, BigInteger.ModPow(c, k, mod)), mod, out ans);
            }

            var all = BigInteger.ModPow(n, k, mod);

            BigInteger.DivRem(BigInteger.Add(BigInteger.Subtract(all, ans), mod), mod, out var rem);
            Console.WriteLine(rem);
        }
        static void Main(string[] args)
        {
            Vertex[] vertices = new Vertex[]
            {
                new Vertex(1),
                new Vertex(2),
                new Vertex(3),
                new Vertex(4),
                new Vertex(5),
                new Vertex(6),
                new Vertex(7),
            };
            Edge[] edges = new Edge[]
            {
                new Edge(vertices[0], vertices[1], 15),
                new Edge(vertices[0], vertices[2], 7),
                new Edge(vertices[1], vertices[3], 8),
                new Edge(vertices[1], vertices[4], 3),
                new Edge(vertices[2], vertices[5], 4),
                new Edge(vertices[3], vertices[4], 1),
                new Edge(vertices[4], vertices[3], 1),
            };
            var graph1 = new Graph();

            graph1.AddVertex(vertices);
            graph1.AddEdge(edges);

            ConsoleWriteGraphMatrix(graph1);

            Console.WriteLine();

            foreach (var item in vertices)
            {
                ConsoleWriteGraphVertexList(graph1, item);
            }
            Console.WriteLine();
            ConsoleWriteFromTo(graph1.Wave1, vertices[0], vertices[5]);
            Console.WriteLine();
            ConsoleWriteFromTo(graph1.Wave1, vertices[0], vertices[6]);
            Console.WriteLine();
            ConsoleWriteFromTo(graph1.Deep, vertices[0], vertices[5]);
            Console.ReadKey();
        }
Example #3
0
        public static void CyclicComponents()
        {
            var nm    = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
            var n     = nm[0];
            var m     = nm[1];
            var graph = new Graph <int>();

            for (int i = 1; i <= n; i++)
            {
                graph.AddVertex(i);
            }

            for (int i = 1; i <= m; i++)
            {
                var input = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
                graph.AddEdge(input[0], input[1], 1);
            }

            Console.WriteLine(graph.CountSingleCycles());
        }
Example #4
0
        public static void NewYearTransportation()
        {
            var nt    = Console.ReadLine().Split(' ').Select(Int32.Parse).ToArray();
            var n     = nt[0];
            var t     = nt[1];
            var graph = new Graph <int>(true);
            var cells = Console.ReadLine().Split(' ').Select(Int32.Parse).ToArray();

            for (int i = 1; i <= n; i++)
            {
                graph.AddVertex(i);
            }

            for (int i = 0; i < cells.Length; i++)
            {
                graph.AddEdge(i + 1, cells[i] + i + 1, 1.0f);
            }
            //  var dfs = graph.Dfs(1);
            // Console.WriteLine(dfs.Contains(t) ? "YES" : "NO");
        }
Example #5
0
        public static void GenealogicalTree()
        {
            var n     = Convert.ToInt32(Console.ReadLine());
            var graph = new Graph <int>(true);

            for (int i = 1; i <= n; i++)
            {
                graph.AddVertex(i);
            }

            for (int i = 1; i <= n; i++)
            {
                var input = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
                for (int j = 0; j < input.Length - 1; j++)
                {
                    graph.AddEdge(i, input[j], 1.0f);
                }
            }

            Console.WriteLine(String.Join(" ", graph.Kahnsalgorithm()));
        }
Example #6
0
        static void Main()
        {
            var graph = new Graph <int>();

            Console.WriteLine("write number of vertexes");
            int numberOfVerteces = int.Parse(Console.ReadLine());

            for (int i = 0; i < numberOfVerteces; i++)
            {
                graph.AddVertex(i);
            }

            Console.WriteLine("enter number of connections");
            int numberOfEdges = int.Parse(Console.ReadLine());

            for (int j = 0; j < numberOfEdges; j++)
            {
                var commandParameters = Console.ReadLine().Split();

                int vertexValue     = int.Parse(commandParameters[0]);
                int vertexNeighbour = int.Parse(commandParameters[1]);

                var     edge           = commandParameters[2];
                decimal weight         = 1;
                bool    isDoubleLinked = true;

                if (commandParameters.Length == 4)
                {
                    weight = decimal.Parse(commandParameters[3]);
                }
                if (commandParameters.Length == 5)
                {
                    weight         = decimal.Parse(commandParameters[3]);
                    isDoubleLinked = bool.Parse(commandParameters[4]);
                }
                graph.AddNeighbourToVertex(vertexValue, vertexNeighbour, edge, weight, isDoubleLinked);
            }

            graph.Traverse();
        }
Example #7
0
        static void Main(string[] args)
        {
            Graph graph = new Graph();

            Vertex v1 = new Vertex(1);
            Vertex v2 = new Vertex(2);
            Vertex v3 = new Vertex(3);
            Vertex v4 = new Vertex(4);
            Vertex v5 = new Vertex(5);
            Vertex v6 = new Vertex(6);
            Vertex v7 = new Vertex(7);

            graph.AddVertex(v1);
            graph.AddVertex(v2);
            graph.AddVertex(v3);
            graph.AddVertex(v4);
            graph.AddVertex(v5);
            graph.AddVertex(v6);
            graph.AddVertex(v7);

            graph.AddEdge(v1, v2);
            graph.AddEdge(v1, v3);
            graph.AddEdge(v3, v4);
            graph.AddEdge(v2, v5);
            graph.AddEdge(v2, v6);
            graph.AddEdge(v6, v5);
            graph.AddEdge(v5, v6);

            GetVertexMatrix(graph);

            Console.WriteLine("\n\n");

            GetVertexList(graph, v1);
            GetVertexList(graph, v2);
            GetVertexList(graph, v3);
            GetVertexList(graph, v4);
            GetVertexList(graph, v5);
            GetVertexList(graph, v6);
            GetVertexList(graph, v7);

            Console.ReadKey();
        }
Example #8
0
        private static void Main(string[] args)
        {
            Console.WriteLine("***** Fun with Graph *****");
            var graph = new Graph();

            var v1 = new Vertex(1);
            var v2 = new Vertex(2);
            var v3 = new Vertex(3);
            var v4 = new Vertex(4);
            var v5 = new Vertex(5);
            var v6 = new Vertex(6);
            var v7 = new Vertex(7);

            graph.AddVertex(v1);
            graph.AddVertex(v2);
            graph.AddVertex(v3);
            graph.AddVertex(v4);
            graph.AddVertex(v5);
            graph.AddVertex(v6);
            graph.AddVertex(v7);

            graph.AddEdge(v1, v2);
            graph.AddEdge(v1, v3);
            graph.AddEdge(v3, v4);
            graph.AddEdge(v2, v5);
            graph.AddEdge(v2, v6);
            graph.AddEdge(v6, v5);
            graph.AddEdge(v5, v6);

            var matrix = graph.GetMatrix();

            for (var i = 0; i < graph.VertexCount; i++)
            {
                for (var j = 0; j < graph.VertexCount; j++)
                {
                    Console.Write(matrix[i, j] + " ");
                }
                Console.WriteLine();
            }
        }
        public void TestAlgDijkstra(string start, string end)
        {
            Graph Graph = new Graph();

            Graph.AddVertex("A");
            Graph.AddVertex("B");
            Graph.AddVertex("C");
            Graph.AddVertex("D");
            Graph.AddVertex("E");
            Graph.AddVertex("F");
            Graph.AddVertex("Z");
            Graph.AddEdge("A", "B", 3, false);
            Graph.AddEdge("A", "C", 4, false);
            Graph.AddEdge("B", "E", 3, false);
            Graph.AddEdge("B", "D", 4, false);
            Graph.AddEdge("B", "F", 2, false);
            Graph.AddEdge("C", "F", 5, false);
            Graph.AddEdge("E", "Z", 1, false);
            Graph.AddEdge("D", "Z", 4, false);
            Graph.AddEdge("F", "Z", 3, false);
            Dijkstra Dij = new Dijkstra(Graph);

            Console.WriteLine("Graph: \n" + Dij.PrintGraph() + "\n" + Dij.GetDis(start, end));
        }
Example #10
0
        static Graph BuildGraph()  //helper function to load the graph needed into memory
        {
            var g = new Graph();

            //verticies
            g.AddVertex("hospital");
            g.AddVertex("post");
            g.AddVertex("cinema");
            g.AddVertex("hall");
            g.AddVertex("market");
            g.AddVertex("school");

            //connections
            g.AddConnections("hospital", ("hall", 5), ("cinema", 2), ("post", 1.5f));
            g.AddConnections("post", ("hospital", 1.5f), ("cinema", 1));
            g.AddConnections("cinema", ("hall", 6), ("school", 3), ("market", 0.5f), ("post", 1), ("hospital", 2));
            g.AddConnections("market", ("cinema", 0.5f), ("school", 2));
            g.AddConnections("hall", ("cinema", 6), ("school", 4), ("hospital", 5));
            g.AddConnections("school", ("hall", 4), ("cinema", 3), ("market", 2));

            return(g);
        }
        static void BFSMain()
        {
            Graph aGraph = new Graph();

            aGraph.AddVertex("A");
            aGraph.AddVertex("B");
            aGraph.AddVertex("C");
            aGraph.AddVertex("D");
            aGraph.AddVertex("E");
            aGraph.AddVertex("F");
            aGraph.AddVertex("G");
            aGraph.AddVertex("H");
            aGraph.AddVertex("I");
            aGraph.AddVertex("J");
            aGraph.AddVertex("K");
            aGraph.AddVertex("L");
            aGraph.AddVertex("M");
            aGraph.AddEdge(0, 1);
            aGraph.AddEdge(1, 2);
            aGraph.AddEdge(2, 3);
            aGraph.AddEdge(0, 4);
            aGraph.AddEdge(4, 5);
            aGraph.AddEdge(5, 6);
            aGraph.AddEdge(0, 7);
            aGraph.AddEdge(7, 8);
            aGraph.AddEdge(8, 9);
            aGraph.AddEdge(0, 10);
            aGraph.AddEdge(10, 11);
            aGraph.AddEdge(11, 12);
            //aGraph.DepthFirstSearch();
            //Console.WriteLine();

            aGraph.BreadthFirstSearch();
            Console.WriteLine();
        }
Example #12
0
        public static void BytheUndergroundorbyFoot()
        {
            {
                var v1v2         = Console.ReadLine().Split(' ').Select(Double.Parse).ToArray();
                var v1           = v1v2[0];
                var v2           = v1v2[1];
                var graph        = new Graph <KeyValuePair <double, double> >();
                var n            = Convert.ToInt32(Console.ReadLine());
                var points       = new List <KeyValuePair <double, double> >();
                var stationEdges = new List <Tuple <KeyValuePair <double, double>, KeyValuePair <double, double> > >();
                for (int i = 0; i < n; i++)
                {
                    var xy = Console.ReadLine().Split(' ').Select(Double.Parse).ToArray();
                    points.Add(new KeyValuePair <double, double>(xy[0], xy[1]));
                    graph.AddVertex(points[i]);
                }

                while (true)
                {
                    var xy = Console.ReadLine().Split(' ').Select(Int32.Parse).ToArray();
                    if (xy[0] == 0 && xy[1] == 0)
                    {
                        break;
                    }
                    var point1 = points[xy[0] - 1];
                    var point2 = points[xy[1] - 1];
                    stationEdges.Add(Tuple.Create(point1, point2));
                    graph.AddEdge(point1, point2, Math.Round(Time(point1, point2, v2), 13));
                }

                for (int i = 0; i < points.Count; i++)
                {
                    for (int j = i; j < n; j++)
                    {
                        graph.AddEdge(points[i], points[j], Math.Round(Time(points[i], points[j], v1), 13));
                    }
                }

                var a  = Console.ReadLine().Split(' ').Select(Int32.Parse).ToArray();
                var b  = Console.ReadLine().Split(' ').Select(Int32.Parse).ToArray();
                var ap = new KeyValuePair <double, double>(a[0], a[1]);
                var bp = new KeyValuePair <double, double>(b[0], b[1]);
                graph.AddVertex(ap);
                graph.AddVertex(bp);
                graph.AddEdge(ap, bp, Math.Round(Time(ap, bp, v1), 13));
                for (int i = 0; i < n; i++)
                {
                    graph.AddEdge(ap, points[i], Math.Round(Time(ap, points[i], v1), 13));
                    graph.AddEdge(bp, points[i], Math.Round(Time(bp, points[i], v1), 13));
                }

                var dijk = graph.OrderedListShortesDistance(ap, bp);
                if (dijk.Count == 1)
                {
                    Console.WriteLine("0.000000");
                    Console.WriteLine(0);
                    return;
                }

                List <int> pathList = new List <int>();

                for (int i = 0; i < dijk.Count - 1; i++)
                {
                    if (stationEdges.Contains(Tuple.Create(dijk[i].Item1, dijk[i + 1].Item1)) ||
                        stationEdges.Contains(Tuple.Create(dijk[i + 1].Item1, dijk[i].Item1)))
                    {
                        var h = points.IndexOf(dijk[i].Item1) + 1;
                        var f = points.IndexOf(dijk[i + 1].Item1) + 1;
                        if (!pathList.Contains(h))
                        {
                            pathList.Add(h);
                        }

                        if (!pathList.Contains(f))
                        {
                            pathList.Add(f);
                        }
                    }
                }

                Console.WriteLine($"{dijk.Last().Item2}");
                Console.Write(pathList.Count + " ");
                foreach (var item in pathList)
                {
                    Console.Write(item + " ");
                }
            }
        }
 /// <summary>
 /// adding a link between two vertices
 /// </summary>
 /// <param name="V1 - имя первой вершины"></param>
 /// <param name="V2 - имя второй вершины"></param>
 /// <param name="weigth - длина пути между врешинами V1 и V2"></param>
 public void AddRel(string V1, string V2, int weigth)
 {
     Graph.AddVertex(V1);
     Graph.AddVertex(V2);
     Graph.AddEdge(V1, V2, weigth);
 }
Example #14
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Graph g = new Graph(5);

            g.AddVertex(1.ToString());
            g.AddVertex(2.ToString());
            g.AddVertex(3.ToString());
            g.AddVertex(4.ToString());
            g.AddVertex(5.ToString());
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Added Vertex : " + g.GetVertexAtIndex(i).label);
            }
            Vertex v1 = g.GetVertexAtIndex(0);
            Vertex v2 = g.GetVertexAtIndex(1);
            Vertex v4 = g.GetVertexAtIndex(4);

            Console.WriteLine("Adding Edge Between ");
            Console.Write(" " + v1.label + " and " + v2.label);
            g.AddEdge(v1, v2);
            Console.Write(", " + v1.label + " and " + v4.label);
            g.AddEdge(v1, v4);
            Console.WriteLine();
            Console.WriteLine("Vertex Edges Connected to");
            g.ShowEdgesOfVertex(v1);


            Graph gr = new Graph(10);

            gr.AddVertex("A");
            gr.AddVertex("B");
            gr.AddVertex("C");
            gr.AddVertex("D");
            gr.AddVertex("E");
            gr.AddVertex("F");
            gr.AddVertex("G");
            gr.AddVertex("H");
            gr.AddVertex("I");
            gr.AddVertex("J");

            Vertex m1  = gr.GetVertexAtIndex(0);
            Vertex m2  = gr.GetVertexAtIndex(1);
            Vertex m3  = gr.GetVertexAtIndex(2);
            Vertex m4  = gr.GetVertexAtIndex(3);
            Vertex m5  = gr.GetVertexAtIndex(4);
            Vertex m6  = gr.GetVertexAtIndex(5);
            Vertex m7  = gr.GetVertexAtIndex(6);
            Vertex m8  = gr.GetVertexAtIndex(7);
            Vertex m9  = gr.GetVertexAtIndex(8);
            Vertex m10 = gr.GetVertexAtIndex(9);

            gr.AddEdge(m1, m2);
            gr.AddEdge(m2, m3);
            gr.AddEdge(m3, m4);
            gr.AddEdge(m1, m5);
            gr.AddEdge(m5, m6);
            gr.AddEdge(m6, m7);
            gr.AddEdge(m1, m8);
            gr.AddEdge(m8, m9);
            gr.AddEdge(m9, m10);
            gr.DepthFirstSearch();
            gr.BredthFirstSearch();

            Console.ReadLine();
        }
Example #15
0
        static void Main(string[] args)
        {
            Graph graph = new Graph();
            bool  flag  = true;

            Menu();
            while (flag)
            {
                Console.WriteLine("Ваш выбор: ");
                int n = int.Parse(Console.ReadLine());
                switch (n)
                {
                case 1:
                    Console.WriteLine("Введите название вершины: ");
                    string name = Console.ReadLine();
                    Console.WriteLine("Вершина добавлена с номером {0}", graph.AddVertex(name));
                    break;

                case 2:
                    Console.WriteLine("Введите первую вершину: ");
                    string v1 = Console.ReadLine();
                    Console.WriteLine("Введите вторую вершину: ");
                    string v2 = Console.ReadLine();
                    Console.WriteLine("Введите расстояние: ");
                    int d = int.Parse(Console.ReadLine());
                    graph.AddEdge(v1, v2, d);
                    break;

                case 3:
                    Console.WriteLine("Введите название вершины: ");
                    string vert = Console.ReadLine();
                    graph.DeleteVertex(vert);
                    break;

                case 4:
                    Console.WriteLine("Введите первую вершину: ");
                    string v1_ = Console.ReadLine();
                    Console.WriteLine("Введите вторую вершину: ");
                    string v2_ = Console.ReadLine();
                    graph.DeleteEdge(v1_, v2_);
                    break;

                case 5:
                    graph.WriteMatrix("input.txt");
                    break;

                case 6:
                    graph.Print();
                    break;

                case 7:
                    Console.WriteLine("Введите вершину: ");
                    string vertex = Console.ReadLine();
                    foreach (var v in graph.FindАdjacentVertexs(vertex))
                    {
                        Console.Write(v.Name + " ");
                    }
                    Console.WriteLine();
                    break;

                case 8:
                    Console.WriteLine("Введите вершину: ");
                    vertex = Console.ReadLine();
                    foreach (var v in graph.FindNonАdjacentVertexs(vertex))
                    {
                        Console.Write(v.Name + " ");
                    }
                    Console.WriteLine();
                    break;

                case 9:
                    Graph graph1 = graph.GetdisorientedGraph();
                    graph1.Print();
                    break;

                case 10:
                    Console.WriteLine("Введите вершину:");
                    var ve = Console.ReadLine();
                    foreach (var ver in graph.DFS(ve))
                    {
                        Console.WriteLine(ver.Name);
                    }
                    break;

                case 11:
                    int cnt = 0;
                    if (graph.IsDisorientedGraph())
                    {
                        foreach (var comp in graph.FindRelatedComponents())
                        {
                            cnt++;
                            Console.Write("{0} компонента связанности: ", cnt);
                            foreach (var _vertex in comp)
                            {
                                Console.Write(_vertex.Name + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    else
                    {
                        foreach (var comp in graph.FindStrongRelatedComponents())
                        {
                            cnt++;
                            Console.Write("{0} компонента сильной связанности: ", cnt);
                            foreach (var _vertex in comp)
                            {
                                Console.Write(_vertex + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    break;

                case 12:
                    cnt = 0;
                    foreach (var comp in graph.FindStrongRelatedComponents())
                    {
                        cnt++;
                        Console.Write("{0} компонента сильной связанности: ", cnt);
                        foreach (var _vertex in comp)
                        {
                            Console.Write(_vertex + " ");
                        }
                        Console.WriteLine();
                    }
                    break;

                case 13:
                    Graph copy = new Graph(graph);
                    graph = graph.GetdisorientedGraph();
                    Graph minGraph = graph.AlgBoruvka();
                    graph = copy;
                    minGraph.Print();
                    break;

                case 14:
                    Console.WriteLine(graph.FindVertexWithMinDistancees().Name);
                    break;

                case 15:
                    Console.Write("Центр графа: ");
                    foreach (var verte in graph.FindCenter())
                    {
                        Console.Write(verte.Name + " ");
                    }
                    Console.WriteLine();
                    break;

                case 16:
                    Console.WriteLine("Минимальные расстояния: ");
                    foreach (var edge in graph.GetMinDistancesForEachPair())
                    {
                        Console.WriteLine(edge.V1.Name + " " + edge.V2.Name + " " + edge.Distance);
                    }
                    break;

                case 17:
                    Console.WriteLine("Введите первую вершину: ");
                    v1 = Console.ReadLine();
                    Console.WriteLine("Введите вторую вершину: ");
                    v2 = Console.ReadLine();
                    Console.Write("Максимальный поток: {0} ", graph.maxFlow(v1, v2));
                    Console.WriteLine();
                    break;

                case 18:
                    flag = false;
                    break;
                }
            }
        }
Example #16
0
        public void Kruskal(Graph MST)
        {
            if (!this.oriented && this.weighted)
            {
                foreach (string vert in vertices.Keys)
                {
                    MST.AddVertex(vert);
                }

                Dictionary <string, int> edges = new Dictionary <string, int>();
                foreach (string v1 in vertices.Keys)
                {
                    if (vertices[v1].Count != 0)
                    {
                        foreach (var v2 in vertices[v1])
                        {
                            if (!edges.ContainsKey(v1 + "-" + v2.Key))
                            {
                                edges.Add(v1 + "-" + v2.Key, int.Parse(v2.Value));
                            }
                        }
                    }
                }

                edges = edges.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);

                Dictionary <string, int> trees = new Dictionary <string, int>();
                int i = 1;
                foreach (string elem in vertices.Keys)
                {
                    trees.Add(elem, i);
                    i++;
                }
                foreach (string edge in edges.Keys)
                {
                    string a = edge.Substring(0, edge.IndexOf("-"));
                    string b = edge.Substring(edge.IndexOf("-") + 1, edge.Length - edge.IndexOf("-") - 1);
                    int    w = edges[edge];
                    if (trees[a] != trees[b])
                    {
                        MST.AddEdge(a, b, w.ToString());
                        int old_id = trees[b];
                        int new_id = trees[a];
                        foreach (string cur_id in vertices.Keys)
                        {
                            if (trees[cur_id] == old_id)
                            {
                                trees[cur_id] = new_id;
                            }
                        }
                        i = new_id;
                    }
                }
                foreach (int elem in trees.Values)
                {
                    if (elem != i)
                    {
                        Console.WriteLine("Граф является лесом (несвязный).");
                        break;
                    }
                }
            }
            else
            {
                Console.WriteLine("Граф должен быть взевешенным и неориентированным!");
            }
        }
Example #17
0
        static void Main(string[] args)
        {
            Graph g = new Graph();

            g.AddVertex("A");
            g.AddVertex("B");
            g.AddVertex("C");
            g.AddVertex("D");
            g.AddVertex("E");
            g.AddVertex("F");
            g.AddVertex("G");
            g.AddVertex("H");
            g.AddVertex("I");
            g.AddVertex("J");
            g.AddVertex("K");
            g.AddVertex("L");
            g.AddVertex("M");
            g.AddVertex("N");
            g.AddVertex("O");
            g.AddVertex("P");
            g.AddVertex("Q");
            g.AddVertex("R");
            g.AddVertex("S");
            g.AddVertex("T");

            g.AddEdge(0, 1);
            g.AddEdge(0, 2);
            g.AddEdge(0, 5);
            g.AddEdge(1, 4);
            g.AddEdge(1, 3);
            g.AddEdge(2, 6);
            g.AddEdge(3, 7);
            g.AddEdge(4, 8);
            g.AddEdge(5, 9);
            g.AddEdge(6, 10);
            g.AddEdge(7, 11);
            g.AddEdge(8, 12);
            g.AddEdge(9, 13);
            g.AddEdge(10, 14);
            g.AddEdge(11, 15);
            g.AddEdge(12, 16);
            g.AddEdge(13, 17);
            g.AddEdge(14, 18);
        }
		public static void Main (string[] args)
		{
			Console.WriteLine ("Hello World!");
			Graph g = new Graph (5);
			g.AddVertex (1.ToString());
			g.AddVertex (2.ToString());
			g.AddVertex (3.ToString());
			g.AddVertex (4.ToString());
			g.AddVertex (5.ToString());
			for (int i = 0; i < 5; i++) {
				Console.WriteLine ("Added Vertex : " + g.GetVertexAtIndex (i).label);
			}
			Vertex v1 = g.GetVertexAtIndex (0);
			Vertex v2 = g.GetVertexAtIndex (1);
			Vertex v4 = g.GetVertexAtIndex (4);
			Console.WriteLine ("Adding Edge Between ");
			Console.Write (" " + v1.label + " and " + v2.label);
			g.AddEdge (v1, v2);
			Console.Write (", " + v1.label + " and " + v4.label);
			g.AddEdge (v1, v4);
			Console.WriteLine ();
			Console.WriteLine ("Vertex Edges Connected to");
			g.ShowEdgesOfVertex (v1);


			Graph gr = new Graph (10);

			gr.AddVertex ("A");
			gr.AddVertex ("B");
			gr.AddVertex ("C");
			gr.AddVertex ("D");
			gr.AddVertex ("E");
			gr.AddVertex ("F");
			gr.AddVertex ("G");
			gr.AddVertex ("H");
			gr.AddVertex ("I");
			gr.AddVertex ("J");

			Vertex m1 = gr.GetVertexAtIndex (0);
			Vertex m2 = gr.GetVertexAtIndex (1);
			Vertex m3 = gr.GetVertexAtIndex (2);
			Vertex m4 = gr.GetVertexAtIndex (3);
			Vertex m5 = gr.GetVertexAtIndex (4);
			Vertex m6 = gr.GetVertexAtIndex (5);
			Vertex m7 = gr.GetVertexAtIndex (6);
			Vertex m8 = gr.GetVertexAtIndex (7);
			Vertex m9 = gr.GetVertexAtIndex (8);
			Vertex m10 = gr.GetVertexAtIndex (9);

			gr.AddEdge (m1, m2);
			gr.AddEdge (m2, m3);
			gr.AddEdge (m3, m4);
			gr.AddEdge (m1, m5);
			gr.AddEdge (m5, m6);
			gr.AddEdge (m6, m7);
			gr.AddEdge (m1, m8);
			gr.AddEdge (m8, m9);
			gr.AddEdge (m9, m10);
			gr.DepthFirstSearch ();
			gr.BredthFirstSearch ();

			Console.ReadLine ();
		}