Я пишу программу планирования, используя C#
, в которой я строю график доступности людей и запускаю алгоритм Дейкстры от каждого начального узла до каждого конечного узла, чтобы определить оптимальный путь.
Я бы хотел использовать количество раз, когда указанный c человек работал в качестве веса ребра (то есть, если алгоритм должен выбирать между Джоном, который работал 2 раза, и Сью, который работал 1, он выберет Сью, потому что она работала меньше раз ).
Проблема в том, что это число будет постоянно меняться в зависимости от того, какую вершину я сейчас просматриваю. Я думаю, что могу создать класс, давайте назовем его TimesWorked
, который хранит список людей и количество раз, сколько они работали, а затем добавить объект для указанного класса в мой класс вершин. Оттуда на каждом ребре от vertex1
до vertex2
, предполагая, что этот край создает лучший путь к vertex2
, чем текущий, я могу глубоко скопировать TimesWorked
из vertex1
, внести необходимые изменения в копию и назначить это к vertex2
. Это потребует, чтобы я проверил все пути в любую вершину, прежде чем проверять пути из вершины, что должно быть возможным, потому что я могу гарантировать, что это направленный граф ацикли c.
Я не написал ни одного кода для алгоритма еще, иначе я бы вставил его, но есть ли у кого-нибудь понимание того, сработает ли моя идея или, возможно, есть лучшая идея?
вот пример графика, я нарисовал его так, чтобы добавить стрелки было не просто, но оно направлено и всегда идет слева направо. начало и конец отражают время начала и время окончания доступности.