Topological sort: Difference between revisions
Content added Content deleted
(Added Bracmat) |
(Updated D entry) |
||
Line 573: | Line 573: | ||
string[][] topoSort(TDependencies d) { |
string[][] topoSort(TDependencies d) { |
||
foreach (k, v; d) |
foreach (k, v; d) |
||
d[k] = array(filter!( |
d[k] = array(filter!(s => s != k)(uniq(v.sort()))); |
||
(uniq(v.sort()))); |
|||
foreach (s; uniq(sort(join(d.values)))) |
foreach (s; uniq(sort(join(d.values)))) |
||
if (s !in d) |
if (s !in d) |
||
Line 595: | Line 593: | ||
foreach (item, dep; d) |
foreach (item, dep; d) |
||
if (!canFind(ordered, item)) |
if (!canFind(ordered, item)) |
||
dd[item] = array(filter! |
dd[item] = array(filter!(s => !canFind(ordered, s)) |
||
( |
(dep)); |
||
(string s) { return !canFind(ordered, s); } |
|||
)(dep)); |
|||
d = dd; |
d = dd; |
||
} |
} |
||
Line 610: | Line 606: | ||
void main() { |
void main() { |
||
immutable data = |
|||
"des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee |
"des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee |
||
dw01 ieee dw01 dware gtech |
dw01 ieee dw01 dware gtech |
||
Line 639: | Line 635: | ||
writeln(subOrder); |
writeln(subOrder); |
||
}</lang> |
}</lang> |
||
{{out}} |
|||
Output: |
|||
<pre>#1 : [ieee, std, synopsys] |
<pre>#1 : [ieee, std, synopsys] |
||
#2 : [dware, gtech, ramlib, std_cell_lib] |
#2 : [dware, gtech, ramlib, std_cell_lib] |