private static void Main(string[] args) { GoGraph <string, string, TTData, float> MainGraph = new GoGraph <string, string, TTData, float>(); PrintMenu(); Menu(MainGraph); }
public Prim(GoGraph <TVertex, TEdge, TData, float> g, Vertex <TVertex> v) { Spanning = new List <MinEdge>(); QueueEdges = new PriorityQueue(); PrimGraph = g; PV = v; }
public DAGSort(GoGraph <TVertex, TEdge, TData, TWeight> g) { DAG = g; QueueSource = new List <int[]>(); SortedVertexes = new List <int>(); for (int i = 0; i < DAG.G.Vertexes.Count; i++) { var it = Graph <TVertex, TEdge, TData, TWeight> .IteratorInputEdge.MakeIt(DAG.G.Vertexes[i], DAG.G);//создали итератор входящих вершин it.Beg(); int inputdegree = 0; for (int j = 0;; j++) { if (it.Input() == null) { break; } inputdegree++; it.Next(); } QueueSource.Add(new int [] { i, inputdegree }); Console.WriteLine(QueueSource[i][0].ToString() + QueueSource[i][1].ToString()); } }
public static void ItAllVer(GoGraph <string, string, TTData, float> e) { var it = new Graph <string, TTEdge, TTData, TTWeight> .IteratorVertexes <string, string, TTData, float>(e.G); Console.WriteLine("1 - установить на начало"); Console.WriteLine("2 - установить на конец"); Console.WriteLine("3 - следующий"); Console.WriteLine("4 - чтение"); Console.WriteLine("5 - запись"); Console.WriteLine("6 - выход"); for (; true;) { int k = int.Parse(Console.ReadLine()); switch (k) { case 1: { it.Beg(); break; } case 2: { it.End(); break; } case 3: { it.Next(); break; } case 4: { var a = it.Input(); if (a == null) { Console.WriteLine("null"); break; } Console.WriteLine("Индекс " + a.Index.ToString()); break; } case 5: { if (it.Input() == null) { Console.WriteLine("null"); break; } Console.WriteLine("Введите данные"); string k2 = Console.ReadLine(); Console.WriteLine("Введите имя"); string k3 = Console.ReadLine(); it.Input().Name = k3; it.Input().Data = k2; Console.WriteLine("Данные изменены"); break; } case 6: { return; break; } default: break; } } }
public static void ItOutEdge(GoGraph <string, string, TTData, float> e) { Console.WriteLine("Введите номер вершины"); int k5 = int.Parse(Console.ReadLine()); var it = Graph <string, string, TTData, float> .IteratorOutEdge.MakeIt(e.G.Vertexes[k5], e.G); //создали итератор Console.WriteLine("1 - установить на начало"); Console.WriteLine("2 - установить на конец"); Console.WriteLine("3 - следующий"); Console.WriteLine("4 - чтение"); Console.WriteLine("5 - запись"); Console.WriteLine("6 - выход"); for (; true;) { int k = int.Parse(Console.ReadLine()); switch (k) { case 1: { it.Beg(); break; } case 2: { it.End(); break; } case 3: { it.Next(); break; } case 4: { if (it.Input() == null) { Console.WriteLine("null"); break; } var a = it.Input(); Console.WriteLine("Исходящая " + a.Vertex1.Index.ToString() + " входящая " + a.Vertex2.Index.ToString() + " с весом " + a.Weight + " и данными " + a.Data); break; } case 5: { if (it.Input() == null) { Console.WriteLine("null"); break; } Console.WriteLine("Введите вес"); float k1 = float.Parse(Console.ReadLine()); Console.WriteLine("Введите данные"); string k2 = Console.ReadLine(); it.Input().Data = k2; it.Input().Weight = k1; Console.WriteLine("Данные изменены"); break; } case 6: { return; break; } default: break; } } }
public static void GoEdge(Edge <string, float, string> edge, GoGraph <string, string, TTData, float> e) { if (edge == null) { Console.WriteLine("ошибка"); return; } Console.WriteLine("1 - чтение ребра"); Console.WriteLine("2 - изменение ребра"); Console.WriteLine("3 - признак исхода из вершины"); Console.WriteLine("4 - прочитать другую вершину"); Console.WriteLine("5 - исходящая вершина"); Console.WriteLine("6 - входящая вершина"); Console.WriteLine("7 - выход"); for (; true;) { int c = int.Parse(Console.ReadLine()); switch (c) { case 1: { Console.WriteLine("Из вершины " + edge.Vertex1.Index + " в вершину " + edge.Vertex2.Index + " с весом " + edge.Weight + " и данными " + edge.Data); break; } case 2: { Console.WriteLine("Введите вес и данные"); float f1 = float.Parse(Console.ReadLine()); string f2 = Console.ReadLine(); edge.Weight = f1; edge.Data = f2; break; } case 3: { Console.WriteLine("Введите номер вершины"); int i1 = int.Parse(Console.ReadLine()); if (i1 >= e.G.Vertexes.Count) { Console.WriteLine("Ошибка"); break; } Console.WriteLine(edge.from(e.G.Vertexes[i1])); break; } case 4: { Console.WriteLine("Введите номер вершины"); int i1 = int.Parse(Console.ReadLine()); if (i1 >= e.G.Vertexes.Count) { Console.WriteLine("Ошибка"); break; } Console.WriteLine(edge.other(e.G.Vertexes[i1]).Index.ToString()); break; } case 5: { Console.WriteLine(edge.Vertex1.Index); break; } case 6: { Console.WriteLine(edge.Vertex2.Index); break; } case 7: { return; break; } default: break; } } }
public static void Menu(GoGraph <string, string, TTData, float> e) { for (; true;) { //var graph = new GoGraph<TTVertex, string, TTData, float>(); int m = int.Parse(Console.ReadLine()); switch (m) { case 0: return; case 1: e = new GoGraph <string, string, TTData, float>(); break; case 2: Console.WriteLine("Введите количество вершин, тип и форму"); int v = int.Parse(Console.ReadLine()); bool d2 = bool.Parse(Console.ReadLine()); bool f2 = bool.Parse(Console.ReadLine()); e = new GoGraph <string, string, TTData, float>(v, d2, f2); break; case 3: Console.WriteLine("Введите количество вершин, ребер, тип и форму"); int v1 = int.Parse(Console.ReadLine()); int e1 = int.Parse(Console.ReadLine()); bool d1 = bool.Parse(Console.ReadLine()); bool f1 = bool.Parse(Console.ReadLine()); e = new GoGraph <string, string, TTData, float>(v1, e1, d1, f1); var it = Graph <string, string, TTData, float> .IteratorAllEdges.MakeIt(e.G); it.Beg(); int y1 = 9; Random r = new Random(); for (; it.Input() != null; it.Next()) { it.Input().Weight = r.Next(y1); } break; case 4: { if (e == null) { Console.WriteLine("Ошибка"); break; } var t = e.G.AddVertex(); Console.WriteLine("Добавлена вершина с индексом " + t.Index.ToString()); break; } case 5: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Введите номера вершин"); int V1 = int.Parse(Console.ReadLine()); int V2 = int.Parse(Console.ReadLine()); if (V1 >= e.G.Vertexes.Count || V2 >= e.G.Vertexes.Count || V1 == V2) { Console.WriteLine("Неверный номер"); break; } else { var t = e.G.AddEdge(e.G.Vertexes[V1], e.G.Vertexes[V2]); if (t == null) { Console.WriteLine("Между вершинами уже есть ребро"); break; } Console.WriteLine("Добавлено ребро"); break; } } case 6: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Введите номер вершины"); int V1 = int.Parse(Console.ReadLine()); // var v = GRAPH.G.Vertexes[V1]; if (V1 >= e.G.Vertexes.Count) { Console.WriteLine("Неверная вершина"); break; } e.G.DeleteVertex(e.G.Vertexes[V1]); break; } case 7: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Введите номера вершин"); int V1 = int.Parse(Console.ReadLine()); int V2 = int.Parse(Console.ReadLine()); if (V1 >= e.G.Vertexes.Count || V2 >= e.G.Vertexes.Count || V1 == V2) { Console.WriteLine("Неверный номер"); break; } e.G.DeleteEdge(e.G.Vertexes[V1], e.G.Vertexes[V2]); break; } case 8: { if (e == null) { Console.WriteLine("Ошибка"); break; } if (e.G == null) { Console.WriteLine("null"); break; } e.Reverse(); Console.WriteLine("Граф преобразован к типу " + e.G.Type.ToString()); break; } case 9: { if (e == null) { Console.WriteLine("Ошибка"); break; } if (e.G == null) { Console.WriteLine("null"); break; } e.Print(); break; } case 10: { e = null; break; } case 11: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Итератор вершин"); ItAllVer(e); break; } case 12: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Итератор всех ребер"); ItAllEdges(e); break; } case 13: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Итератор исходящих ребер"); ItOutEdge(e); break; } case 14: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Итератор входящих ребер"); ItInEdge(e); break; } case 15: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine(e.G.Saturation().ToString()); break; } case 16: { Console.WriteLine(e.G.EdgesCount.ToString()); break; } case 17: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine(e.G.Vertexes.Count.ToString()); break; } case 18: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine(e.G.Type.ToString()); break; } case 19: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine(e.G.Oriented); break; } case 20: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Сортировка"); var Task1 = new DAGSort <string, string, TTData, float>(e); Task1.EnterSort(); break; } case 21: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Алгоритм Прима"); Console.WriteLine("Введите номер истока"); int y = int.Parse(Console.ReadLine()); if (y >= e.G.Vertexes.Count) { Console.WriteLine("Неверный номер"); break; } var Task2 = new Prim <string, string, TTData, float>(e, e.G.Vertexes[y]); Task2.MST_Prim(); break; } case 22: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Введите номера вершин"); int vv1 = int.Parse(Console.ReadLine()); int vv2 = int.Parse(Console.ReadLine()); if (vv1 >= e.G.Vertexes.Count || vv2 >= e.G.Vertexes.Count) { Console.WriteLine("Неверные вершины"); break; } var t = e.GetEdge(e.G.Vertexes[vv1], e.G.Vertexes[vv2]); if (t == null) { Console.WriteLine("null"); break; } // Console.WriteLine("Из вершины " + t.Vertex1.Index + " в вершину " + t.Vertex2.Index + " вес " + t.Weight); GoEdge(t, e); break; } //case 23: // { // if (e == null) // { // Console.WriteLine("Ошибка"); // break; // } // Console.WriteLine("Введите номера вершин"); // int vv1 = int.Parse(Console.ReadLine()); // int vv2 = int.Parse(Console.ReadLine()); // Console.WriteLine("Введите вес"); // float ww1 = float.Parse(Console.ReadLine()); // if (vv1 >= e.G.Vertexes.Count || vv2 >= e.G.Vertexes.Count) // { // Console.WriteLine("Неверные вершины"); // break; // } // if (e.GetEdge(e.G.Vertexes[vv1], e.G.Vertexes[vv2]) != null) // { // e.GetEdge(e.G.Vertexes[vv1], e.G.Vertexes[vv2]).Weight = ww1; // Console.WriteLine("Вес изменен"); // break; // } // else // { // Console.WriteLine("null"); // break; // } // // Console.WriteLine("Из вершины " + t.Vertex1.Index + " в вершину " + t.Vertex2.Index + " вес " + t.Weight + "данные " + t.Data); // break; // } case 24: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Введите номер вершины"); int y111 = int.Parse(Console.ReadLine()); var a = e.G.GetVertex(y111); if (a == null) { Console.WriteLine("Неверная вершина"); break; } Console.WriteLine("Индекс " + a.Index + " данные " + a.Data + " имя " + a.Name); break; } case 25: { if (e == null) { Console.WriteLine("Ошибка"); break; } Console.WriteLine("Введите номер вершины"); int y111 = int.Parse(Console.ReadLine()); Console.WriteLine("Ведите данные и имя"); string h1 = (Console.ReadLine()); string h2 = (Console.ReadLine()); var a = e.G.GetVertex(y111); if (a == null) { Console.WriteLine("Неверная вершина"); break; } a.Name = h2; a.Data = h1; Console.WriteLine("Данные изменены"); break; } } } }