/// <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); }