Рассмотрим следующие зависимости (где A --> B
означает В зависит от А, так эффективно, А является «родитель»)топологическую сортировку с поддержкой циклических зависимостей
A --> B
A --> C
C --> D
C --> E
Более графически:
A
|
----------
| |
B C
|
-----------
| |
D E
Алгоритм топологической сортировки возвращал бы что-то вроде:
ABCDE
У меня есть fou nd код для этого (exhibit A и exhibit B), но не поддерживают зависимости цикличности. Я в situtation, что это может произойти:
A --> B
B --> C
B --> D
C --> B
C --> E
Графически:
A
|
B <--> C
| |
D E
Это может вернуть ABCDE
или ACBDE
. Так как B и C находятся на одном уровне, порядок между ними не важен (аналогично для D и E).
Как я мог выполнить такую вещь. Я понимаю, что это не точно топологическая сортировка, но я не эксперт-математик, поэтому я не знаю, с чего начать, не говоря уже о том, как это реализовать.
Лично я работаю на C#, но если вы знаете, как это сделать на любом другом языке, я был бы рад изучить ваш код и перевести его на C#.
обновление
Я также могу иметь следующую ситуацию:
A <--------
| |
--> B --> C
| |
D E
Так, важно, это не должно быть деревом. Я могу иметь любой произвольный граф. На самом деле не все узлы должны быть связаны друг с другом.
Вы предполагаете, что этот график имеет одну начальную точку. Учитывая, что это график зависимости, я сильно сомневаюсь, что это так. – Dukeling
Действительно, говоря о дереве слишком быстро. Тем не менее, первое путешествие по графику - это классическая проблема – Vinzz
Hm, и что, если бы я добавил ситуацию, когда 'A -> B -> C -> A'? См. Мое редактирование. – Peter