123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- using System;
- using System.Collections.Generic;
- using System.IO; // Добавьте это пространство имен
- using System.Linq;
- // Класс для ввода/вывода графа
- static class GraphIO
- {
- static readonly Dictionary<char, int> CharToVertexId = GraphIoUtilities.GenerateCharToVertexId();
- static readonly Dictionary<int, char> VertexIdToChar = GraphIoUtilities.GenerateVertexIdToChar();
- static public Graph InputGraphFromConsole()
- {
- Console.WriteLine("Запущен ввод графа через консоль.");
- Console.Write("Использовать буквы для названия вершин (ДА/НЕТ): ");
- string answer = Console.ReadLine();
- bool useLetters = false;
- if (answer.ToLower() == "да")
- {
- useLetters = true;
- }
- int verticesAmount = -1;
- while (verticesAmount < 0)
- {
- try
- {
- Console.Write("Введите количество вершин: ");
- verticesAmount = Convert.ToInt32(Console.ReadLine());
- }
- catch (Exception)
- {
- Console.WriteLine("Количество вершин должно быть целым числом без лишних знаков.");
- }
- }
- Graph graph = new Graph();
- for (int i = 1; i <= verticesAmount; i++)
- {
- Vertex vertex = new Vertex(i);
- graph.AddVertex(vertex);
- }
- for (int i = 1; i <= verticesAmount; i++)
- {
- while (true)
- {
- try
- {
- if (useLetters)
- {
- Console.WriteLine($"[] Вершина [{VertexIdToChar[i]}]");
- }
- else
- {
- Console.WriteLine($"[] Вершина [{i}]");
- }
- Console.Write("Введите количество ребер этой вершины: ");
- int edgesAmount = Convert.ToInt32(Console.ReadLine());
- for (int j = 1; j <= edgesAmount; j++)
- {
- int targetVertexId, distance;
- Console.WriteLine("- Ребро");
- if (useLetters)
- {
- char fromLetter = VertexIdToChar[i];
- Console.WriteLine($"Начальная вершина: [{fromLetter}]");
- Console.Write($"Конечная вершина: ");
- char targetVertexLetter = Convert.ToChar(Console.ReadLine());
- targetVertexId = CharToVertexId[targetVertexLetter];
- }
- else
- {
- Console.WriteLine($"Начальная вершина: [{i}]");
- Console.Write($"Конечная вершина: ");
- targetVertexId = Convert.ToInt32(Console.ReadLine());
- }
- Console.Write($"Расстояние: ");
- distance = Convert.ToInt32(Console.ReadLine());
- Edge edge = new Edge(from: graph.Vertices[i - 1], to: graph.Vertices[targetVertexId - 1], distance: distance);
- graph.Vertices[i - 1].AddEdge(edge);
- }
- Console.Write("Повторить попытку ввода ребер этой вершины (ДА/НЕТ): ");
- answer = Console.ReadLine();
- if (answer.ToLower() != "да")
- {
- Console.WriteLine();
- break;
- }
- }
- catch (Exception)
- {
- Console.WriteLine("Возникла ошибка, необходимо повторить ввод для этой вершины.");
- }
- Console.WriteLine();
- }
- }
- return graph;
- }
- // Метод для чтения матрицы из файла
- private static int[,] ReadMatrixFromFile(string filePath)
- {
- var lines = File.ReadAllLines(filePath);
- int size = lines.Length;
- int[,] matrix = new int[size, size];
- for (int i = 0; i < size; i++)
- {
- var values = lines[i].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
- .Select(v => int.Parse(v.Trim()))
- .ToArray();
- for (int j = 0; j < values.Length; j++)
- {
- matrix[i, j] = values[j];
- }
- }
- return matrix;
- }
- static public Graph InputGraphFromManual()
- {
- string filePath = "C:\\Users\\admin\\Колледж\\Работы3курс\\МОДУЛЬНЫЙ\\DijkstraMethodKuzmin\\DijkstraMethod\\test.txt";
- int[,] matrix = ReadMatrixFromFile(filePath);
- Graph graph = new Graph(matrix);
- return graph;
- }
- public static Graph InputGraphFromTetradka()
- {
- // А Б В Г Д Е Ж З И К
- int[,] adjacencyMatrix = new int[,] { { 0, 20, 25, 30, 0, 0, 0, 0, 0, 0 },
- { 20, 0, 0, 5, 0, 10, 0, 0, 0, 0 },
- { 25, 0, 0, 0, 0, 10, 15, 0, 0, 0 },
- { 30, 5, 0, 0, 25, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 25, 0, 15, 0, 5, 10, 20 },
- { 0, 10, 10, 0, 15, 0, 10, 0, 0, 0 },
- { 0, 0, 15, 0, 0, 10, 0, 15, 0, 0 },
- { 0, 0, 0, 0, 5, 0, 15, 0, 0, 10 },
- { 0, 0, 0, 0, 10, 0, 0, 0, 0, 10 },
- { 0, 0, 0, 0, 20, 0, 0, 10, 10, 0 }
- };
- Graph graph = new Graph(adjacencyMatrix);
- return graph;
- }
- }
|