in reply to Priority Sorting Challenge
Rather than solving the problem of circular dependencies, Sort::Topological just insists you not have any. Take a look at the Graph module, which has a toposort function. That still doesn't solve detection, but it doesn't blow up:
You could detect cycles by, for each node, checking if there is a path to any of its predecessors. That will not scale well, but it can be done$ perl -MGraph -e'my $g=Graph->new();$g->add_cycle(qw/foo bar baz/);$g +->add_edge(qw/quux foo/);print $g->toposort()' quuxbarbazfoo$
Graph nodes can carry weights, which will allow the priority part of your problem. Properly set up, a minimum spanning tree, $G->MST_Kruskal, should give a solution.
After Compline,
Zaxo
|
---|