/// <summary>Меню передвижения вершины</summary>
        /// <param name="graph">Граф</param>
        /// <param name="menu">Содержание меню</param>
        private static void MoveMenu(Graph graph, string[] menu)
        {
            string menuMessage = MenuMessage(menu);
            int    id          = NumberInput(messages[Messages.EnterNumber], 0, graph.Count - 1, false);

            graph.FindNode(id).State = Node.Status.marked_to_process;
            Print(graph, false);
            bool isExit = false;

            while (!isExit)
            {
                int input = NumberInput(menuMessage, 0, menu.Length - 1);
                switch (input)
                {
                case 1:    //Left
                    GraphPrinter.MoveNode(id, -1, 0);
                    break;

                case 2:    //Right
                    GraphPrinter.MoveNode(id, 1, 0);
                    break;

                case 3:    //Down
                    GraphPrinter.MoveNode(id, 0, 1);
                    break;

                case 4:    //Up
                    GraphPrinter.MoveNode(id, 0, -1);
                    break;

                case 5:    //change node
                    Print(graph);
                    id = NumberInput(messages[Messages.EnterNumber], 0, graph.Count - 1, false);
                    graph.FindNode(id).State = Node.Status.marked_to_process;
                    break;

                case 0:    //exit
                    isExit = true;
                    break;
                }
                Console.Clear();
                Print(graph, false);
            }
        }
        /// <summary>Создает заранее зарадкоженый граф (для наглядности ДЗ)</summary>
        /// <returns>Созданный граф</returns>
        private static Graph CreatePredefinedGraph()
        {
            const int ELEMENTS_PREDEF = 15;

            Graph newGraph = new Graph();

            //Добавляем в граф вершины
            for (int i = 0; i < ELEMENTS_PREDEF; i++)
            {
                newGraph.AddNode(i);
            }

            //Предварительное создание массива координат вершин
            GraphPrinter.CreateGraphInfo(newGraph);

            //Расставляем вершины так как нам нужно
            int[,] coords =
            {
                { 32,  0 }, { 16,  3 }, { 32,  4 }, { 48,  2 }, {  6,  7 }, { 24,  7 }, { 36,  8 }, { 54, 7 },
                {  7, 11 }, { 22, 12 }, { 36, 12 }, { 54, 12 }, { 18, 15 }, { 30, 15 }, { 34, 19 }
            };

            for (int i = 0; i < ELEMENTS_PREDEF; i++)
            {
                GraphPrinter.MoveNode(i, coords[i, 0], coords[i, 1], false);
            }

            //Добавляем ребра
            int[,] edges =
            {
                { 0,  1 }, {  0,  2 }, {  0,  3 }, {  1,  4 }, {  1,  5 }, { 2,  6 }, { 3, 6 }, { 3,  7 },
                { 4,  8 }, {  5,  9 }, {  5, 10 }, {  6, 10 }, {  6, 11 }, { 7, 11 }, { 8, 9 }, { 8, 12 },
                { 9, 13 }, { 10, 13 }, { 11, 14 }, { 13, 14 }, { 12, 14 }
            };

            for (int i = 0; i < edges.Length / 2; i++)
            {
                newGraph.AddEdge(edges[i, 0], edges[i, 1], rnd.Next(MAX_WEIGHT));
            }

            return(newGraph);
        }