В этом задании вам необходимо реализовать параллельную версию алгоритма Дейкстры с использованием Multi-Queue в качестве приоритетной очереди.
Решение, в котором поддерживается счетчик суммарного количества вершин в очереди и в процессе обработки (как рассказано на лекции) считается корректным. Для тех, кто хочет получить больше пользы от выполнения задания, предлагается поддерживать счетчики количества пустых очередей и ждущих потоков. Ожидание должно быть активным (проверка необходимого условия в цикле), никакие wait, park и прочие примитивы использовать не нужно.
Проект содержит следующие файлы:
Graph.ktсодержит классыNodeиEdge, которые вы будете использовать в алгоритме. Для обновления расстояния до вершины необходимо использоватьdistanceMutable.compareAndSet(..).Dijkstra.ktсодержит шаблон для параллельной версии алгоритма, его вам и требуется дописать.
Разрешается изменять только файл Dijkstra.kt. Для обновления расстояния до вершины необходимо использовать CAS.