GetLists(tasks[1..m], depends[1..m])
1. topological_sort(tasks)
2. cumulative = set()
3. lists = queue()
4. i = 0
5. while |cumulative| != m do
6. temp = set()
7. while depends[i] is a subset of cumulative do
8. temp = temp union {tasks[i]}
9. i = i + 1
10. cumulative = cumulative union temp
11. lists.enqueue(temp)
そのような何かがうまくいくかもしれません。リンチピンは、確実に終了するように「トポロジカルソート」を実行していることに注意してください。また、このアルゴリズムは、有効な解を持つ入力のセットに対してのみ正しいことに注意してください。解決策がない場合、これは永久にループします。修正は簡単ですが、それを処理できます。
例:Aは何にも依存せず、BとCはAに依存し、EはAとCに依存し、DはCとBに依存します。
Topological sort: A, B, C, D, E.
cumulative = {}
lists = []
i = 0
|cumulative| = 0 < 5 so...
temp = {}
depends[A] = {} is a subset of {} so
temp = {A}
i = 1
depends[B] = {A} is not a subset of {}, so break
cumulative = {A}
lists = [{A}]
|cumulative| = 1 < 5 so...
temp = {}
depends[B] = {A} is a subset of {A}, so
temp = {B}
i = 2
depends[C] = {A} is a subset of {A}, so
...
あなたはその考えを理解します。