1 -> 2 и 3
2 и 3 -> 4 и 5
4 и 5 -> 6
Самый длинный путь - 3, поэтому следует указать, что вы можете сделать это с 3 семафорами.
Вершины должны быть результатами на семафоре, соответствующими самому длинному пути от источника. И предварительные требования должны быть ребрами, ведущими к результатам, полученным из самого длинного доступного пути.
Формулировка вышеупомянутого сбивает с толку, но это означает, что 1-> 5 было исключено, потому что это ребро является ребром уровня 1 (исходит от источника), а 5 является узлом уровня 2 (имеет максимальный путь от источник к нему длины 2). Тот же процесс устраняет 3-> 6.
Вы не можете устранить 2-> 5, потому что это путь уровня 2, ведущий к узлу уровня 2. Если бы это был путь уровня 1 или 5 был узлом уровня 3, вы могли бы это сделать, потому что какой-то другой семафор обработал бы предварительные условия для 5.
Рассмотрим ваш граф с ребрами, добавленными из 2-> 1 и 6-> 3. (Это означает, что вы можете выполнить 1 один раз, затем 2 должно произойти, прежде чем вы сможете повторить 1, также для 3 и 6.)
1, затем появляется как результат на уровне 2, потому что самый длинный путь, ведущий к 2, имеет длину 2: не требуется дополнительного семафора для 2-> 1
примечание: это не означает, что 1 появляется как предварительное условие для уровня 3, это соответствует определениям, которые я дал, но предыдущий пример имел соответствие предварительных требований с результатами, что было просто совпадением, поэтому я подумал: Я бы указал на это.
Теперь у вас также есть путь из 6-> 1 для рассмотрения. Этот путь имеет длину 4 от источника и еще не исследован. Поэтому ему нужен дополнительный семафор, так как это означает, что у нас есть 4-й уровень. Этот 4-й уровень - просто семафор из 6-> 1, потому что это единственные неисследованные 4 пути длины. Как только край пройден, вы можете игнорировать его с этого момента.
Так что создание циклического графа не делает его намного сложнее. Вещи все еще находятся на «уровнях» и не могут появиться в результате или требовать более одного уровня. Единственное, что нам нужно принять во внимание, что раньше нам не нужно, это то, что после прохождения ребра вы игнорируете его, это позволяет избежать бесконечных циклов с циклическим графом, и это просто не было необходимо ранее.