static void Main(string[] args) { Console.WriteLine("GRAPH AND GRAPH TRAVERSAL"); var network = new Graph(); network.PrintAdjacencyList(); network.BFS(0); network.DFS(0); }
static void Main(string[] args) { var g = new Graph <int>(); g.AddVertex(0); g.AddVertex(1); g.AddVertex(2); g.AddVertex(3); g.AddEdge(0, 1); g.AddEdge(0, 2); g.AddEdge(1, 2); g.AddEdge(2, 0); g.AddEdge(2, 3); g.AddEdge(3, 3); g.BFS(2); // 2 3 0 1 g.DFS(0); // 0 2 3 1 g.DFS_iter(0); Console.ReadKey(); }
static void Main() { /*-------------------Undirected and unweighted edges------------------------------*/ //Graph<int> graph = new Graph<int>(false, false); // initiate a unidirectional graph //Node<int> n1 = graph.AddNode(1); // add numbered nodes //Node<int> n2 = graph.AddNode(2); //Node<int> n3 = graph.AddNode(3); //Node<int> n4 = graph.AddNode(4); //Node<int> n5 = graph.AddNode(5); //Node<int> n6 = graph.AddNode(6); //Node<int> n7 = graph.AddNode(7); //Node<int> n8 = graph.AddNode(8); //graph.AddEdge(n1, n2); // add edges between nodes //graph.AddEdge(n1, n3); //graph.AddEdge(n2, n4); //graph.AddEdge(n3, n4); //graph.AddEdge(n4, n5); //graph.AddEdge(n5, n6); //graph.AddEdge(n5, n7); //graph.AddEdge(n5, n8); //graph.AddEdge(n6, n7); //graph.AddEdge(n7, n8); //List<Node<int>> dfsNodes = graph.DFS(); // returns a list of Node instances //dfsNodes.ForEach(n => WriteLine(n)); /*-------------------Undirected and weighted edges------------------------------*/ //Graph<int> graph = new Graph<int>(false, true); //Node<int> n1 = graph.AddNode(1); // add numbered nodes //Node<int> n2 = graph.AddNode(2); //Node<int> n3 = graph.AddNode(3); //Node<int> n4 = graph.AddNode(4); //Node<int> n5 = graph.AddNode(5); //Node<int> n6 = graph.AddNode(6); //Node<int> n7 = graph.AddNode(7); //Node<int> n8 = graph.AddNode(8); // graph.AddEdge(n1, n2, 3); // graph.AddEdge(n1, n3, 5); // graph.AddEdge(n2, n4, 4); // graph.AddEdge(n3, n4, 12); // graph.AddEdge(n4, n5, 9); // graph.AddEdge(n4, n8, 8); // graph.AddEdge(n5, n6, 4); // graph.AddEdge(n5, n7, 5); // graph.AddEdge(n5, n8, 1); // graph.AddEdge(n6, n7, 6); // graph.AddEdge(n7, n8, 20); // graph.AddEdge(n2, n6, 20); // graph.AddEdge(n2, n5, 20); /*-------------------Directed and weighted edges------------------------------*/ WriteLine("New Graph 1"); Graph <int> graph = new Graph <int>(true, true); Node <int> n1 = graph.AddNode(1); // you can add these to a file Node <int> n2 = graph.AddNode(2); Node <int> n3 = graph.AddNode(3); Node <int> n4 = graph.AddNode(4); Node <int> n5 = graph.AddNode(5); Node <int> n6 = graph.AddNode(6); Node <int> n7 = graph.AddNode(7); Node <int> n8 = graph.AddNode(8); graph.AddEdge(n1, n2, 9); // you can add these to a file graph.AddEdge(n1, n3, 5); graph.AddEdge(n2, n1, 3); graph.AddEdge(n2, n4, 18); graph.AddEdge(n3, n4, 12); graph.AddEdge(n4, n2, 2); graph.AddEdge(n4, n8, 8); graph.AddEdge(n5, n4, 9); graph.AddEdge(n5, n6, 2); graph.AddEdge(n5, n7, 5); graph.AddEdge(n5, n8, 3); graph.AddEdge(n6, n7, 1); graph.AddEdge(n7, n5, 4); graph.AddEdge(n7, n8, 6); graph.AddEdge(n8, n5, 3); List <Node <int> > dfsNodes = graph.DFS(); // returns a list of Node instances dfsNodes.ForEach(n => WriteLine(n)); /*-------------------Kruskal's Algorithm------------------------------*/ //List<Edge<int>> mstKruskal = graph.MSTKruskal(); //mstKruskal.ForEach(e => WriteLine(e)); /*-------------------Prim's Algorithm------------------------------*/ //List<Edge<int>> mstPrim = graph.MSTPrim(); //mstPrim.ForEach(e => WriteLine(e)); /*-------------------Depth-First Search------------------------------*/ //List<Node<int>> dfsNodes = graph.DFS(); // returns a list of Node instances //dfsNodes.ForEach(n => WriteLine(n)); /*-------------------Breadth-first Search------------------------------*/ //List<Node<int>> bfsNodes = graph.BFS(); // returns a list of Node instances //bfsNodes.ForEach(n => WriteLine(n)); /*-------------------telecomm cable------------------------------*/ //WriteLine("Start example here: \n"); //Graph<string> graph = new Graph<string>(false, true); //Node<string> nodeb1 = graph.AddNode("b1"); //Node<string> nodeb2 = graph.AddNode("b2"); //Node<string> nodeb3 = graph.AddNode("b3"); //Node<string> nodeb4 = graph.AddNode("b4"); //Node<string> nodeb5 = graph.AddNode("b5"); //Node<string> nodeb6 = graph.AddNode("b6"); //Node<string> noder1 = graph.AddNode("r1"); //Node<string> noder2 = graph.AddNode("r2"); //Node<string> noder3 = graph.AddNode("r3"); //Node<string> noder4 = graph.AddNode("r4"); //Node<string> noder5 = graph.AddNode("r5"); //Node<string> noder6 = graph.AddNode("r6"); //graph.AddEdge(nodeb1, nodeb2, 2); //graph.AddEdge(nodeb1, nodeb3, 20); //graph.AddEdge(nodeb1, nodeb4, 30); //graph.AddEdge(nodeb2, nodeb4, 20); //graph.AddEdge(nodeb2, nodeb3, 30); //graph.AddEdge(nodeb3, nodeb4, 2); //graph.AddEdge(nodeb2, noder2, 25); //graph.AddEdge(nodeb4, noder4, 25); //graph.AddEdge(noder1, noder2, 1); //graph.AddEdge(noder2, noder3, 1); //graph.AddEdge(noder3, noder4, 1); //graph.AddEdge(noder1, noder5, 75); //graph.AddEdge(noder3, noder6, 100); //graph.AddEdge(noder5, noder6, 3); //graph.AddEdge(noder6, nodeb6, 10); //graph.AddEdge(noder6, nodeb5, 3); //graph.AddEdge(nodeb5, nodeb6, 6); //List<Edge<string>> mstPrim = graph.MSTPrim(); //mstPrim.ForEach(e => WriteLine(e)); //WriteLine("Total Cost: " + mstPrim.Sum(e => e.Weight)); }
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; } } }