Реализация имеющегося алгоритма на С++

278
16 июля 2022, 01:30

Всем добрый день! Вопрос не из легких, но вдруг кто-то из присутствующих здесь когда-либо сталкивался с этой задачей.
Необходимо реализовать следующий алгоритм на С++, уже долго над этим сижу, никак не могу придумать, как правильно это сделать. Есть такая таблица с решением задачи (прикрепила картинку). Имеется матрица с тремя столбцами (A,B,Sij). A и В - города. Sij - показатель, который нужно рассчитывать для данного алгоритма. Первая пара А и В заносится в вектор, в данном случае маршрут 1 (столбик "маршрут", где 0 - точка, откуда выезжает машина, и куда возвращается). Есть предел в 500 км для маршрута. Для каждой следующей строчки маршрута мы проверяем два условия:

1 - оба пункта А и В вместе не задействованы в каком-либо из ранее построенных маршрутов

2 - один из пунктов является первой или последней точкой в каком-либо из ранее построенных маршрутов (например, для строки 2, пункт B (10) был первым в маршруте из предыдущей строки)

Если оба условия выполнены, ставим + в 4 и 5 столбцах и добавляем этот отрезок пути в маршрут (например, было 0-10-11-0, а после добавления отрезка 1-10 стало 0-1-10-11-0) Далее считаем общее расстояние маршрута (по матрице расстояний, которая дана), и если оно меньше 500 км, принимаем этот маршрут как новый.

Аналогично все для всех следующих строчек. Если в какой-либо строчке оба пункта еще нигде не использовались, создаем еще один маршрут, называем его 2 и последующие строчки проверяем уже как для 1 маршрута, так и для второго.

Алгоритм продолжается, пока не будут задействованы все пункты.

Я не прошу полного решения данной задачи, я надеюсь, что мне хотя бы помогут с идеей, как логично собрать в кучу столько проверок для каждой строки. Потому что я в них уже запуталась (этот алгоритм - реализация метода Кларка-Райта для решения задачи маршрутизации транспорта). Заранее спасибо!

READ ALSO
How can I get keys set from map or unordered_map in c++? [закрыт]

How can I get keys set from map or unordered_map in c++? [закрыт]

Вопрос закрыт, так как на Stack Overflow на русском вопросы принято задавать только на русском языкеПожалуйста, переведите ваш вопрос на русский...

230
Как получить HWND окна в котором рисует OpenGL?

Как получить HWND окна в котором рисует OpenGL?

Мне нужно получить HWND или ID потока окна текущего процесса (не моего, я делаю DLL инъекцию) в котором OpenGL производит отрисовку чтобы установить...

262
C++ Builder. Редактирование свойств формы

C++ Builder. Редактирование свойств формы

Всем доброго дня! Работаю в C++ builder 10 и создаю пустую форму, которая по-умолчанию наследуется от класса TFormСтолкнулся с проблемой, корень которой...

216
Вычитать сообщения из потока байт

Вычитать сообщения из потока байт

Иметься поток байт, те

160