Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практическая работа №6

.pdf
Скачиваний:
2
Добавлен:
24.01.2025
Размер:
714 Кб
Скачать
☆

int minDistance = int.MaxValue; // минимальное расстояние до непосещенного города

int minIndex = -1; // номер города, который находится на минимальном

расстоянии

for (int i = 0; i < numNodes; i++)

{

if (!visited[i] && !forbiddenNodes.Contains(i) && distance[i] < minDistance) // выбирается город, который еще не был посещен, не является запрещенным, и имеет минимальное расстояние от нацального города

{

minDistance = distance[i]; minIndex = i;

}

}

if (minIndex == -1) // Если не найден узел с минимальным расстоянием, выход из чикла

{

break;

}

visited[minIndex] = true; // Помецаем узел как посещенный

for (int i = 0; i < numNodes; i++) // перебирает все города, цтобы проверить, можно ли сократить расстояние до них, пройдя церез только цто посещенный город

{

if (!visited[i] && !forbiddenNodes.Contains(i) && adjacencyMatrix[minIndex, i] != 0 && distance[minIndex] != int.MaxValue &&

distance[minIndex] + adjacencyMatrix[minIndex, i] < distance[i])

{

distance[i] = distance[minIndex] + adjacencyMatrix[minIndex, i]; // Обновляется расстояние до города i, если путь церез minIndex короце

}

}

}

Console.WriteLine("Кратцайший путь из узла " + startNode + " в узел " + endNode + " (с ограницениями):");

if (distance[endNode] != int.MaxValue)

{

Console.WriteLine("Расстояние = " + distance[endNode]);

}

else

{

Console.WriteLine("Путь не найден.");

}

}

}

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите колицество городов:"); int numCities = int.Parse(Console.ReadLine()); Graph roadSystem = new Graph(numCities);

Console.WriteLine("Введите информачию о дорогах (откуда-куда-длина):"); for (int i = 0; i < numCities - 1; i++)

{

for (int j = i + 1; j < numCities; j++)

{

Console.Write($"Дорога из города {i} в город {j} (или обратно): "); int weight = int.Parse(Console.ReadLine());

roadSystem.AddEdge(i, j, weight);

11

}

}

roadSystem.PrintAdjacencyMatrix();

Console.WriteLine("Введите город А:");

int startCity = int.Parse(Console.ReadLine()); Console.WriteLine("Введите город В:");

int endCity = int.Parse(Console.ReadLine());

Console.WriteLine("Введите запрещенные города (C, D,...) церез пробел:"); string[] forbiddenCitiesStr = Console.ReadLine().Split(' ');

int[] forbiddenCities = Array.ConvertAll(forbiddenCitiesStr, int.Parse);

roadSystem.ShortestPath(startCity, endCity, forbiddenCities);

}

}

12