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
In reply to Re: Priority Sorting Challenge
by Zaxo
in thread Priority Sorting Challenge
by Limbic~Region
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |