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(); }
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()); }
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"); }
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())); }
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(); }
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(); }
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)); }
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(); }
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); }
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(); }
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; } } }
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("Граф должен быть взевешенным и неориентированным!"); } }
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 (); }