Beispiel #1
0
        private static void Main(string[] args)
        {
            GoGraph <string, string, TTData, float> MainGraph = new GoGraph <string, string, TTData, float>();

            PrintMenu();
            Menu(MainGraph);
        }
Beispiel #2
0
 public Prim(GoGraph <TVertex, TEdge, TData, float> g, Vertex <TVertex> v)
 {
     Spanning   = new List <MinEdge>();
     QueueEdges = new PriorityQueue();
     PrimGraph  = g;
     PV         = v;
 }
Beispiel #3
0
        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());
            }
        }
Beispiel #4
0
        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;
                }
            }
        }
Beispiel #5
0
        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;
                }
            }
        }
Beispiel #6
0
        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;
                }
            }
        }
Beispiel #7
0
        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;
                }
                }
            }
        }