in reply to Re^2: How do I use Graph::Traversal? in thread How do I use Graph::Traversal?
A topo sort is not strict enough for what you want (it just guarantees parents are returned before children), and in this example returns (A, B, C, D, b, c, d, e, E). Is there any way to force an alphabetical order on your vertices? I'd try adding a fixed length prefix to every vertex as you're adding edges, if at all possible. E.g., start with $p = "0000" (or however many places necessary), and just do $p++ before adding vertex "${p}_$v".
And then strip the prefix as each vertex is returned before you need to use it.
Re^4: How do I use Graph::Traversal?
by thor (Priest) on Jul 07, 2005 at 18:17 UTC
|
As it turns out, a topological sort is good enough for my purposes. The actual scenario is thus: I have a series of batch jobs that are related by dependencies. I noticed that some jobs submitted before the jobs on which they depend submit. So, for each job, I want to find the earliest possible submittal time such that at submittal time, the given job has a chance to run. As you said, a topological sort returns parents before children, this'll suffice for the given task. Thanks for your help!
Incidentally, I was originally going to go with a breadth-first search. I ran in to the same sort of problem that I did with depth-first: the nodes weren't returning in the order that I expected. It was in the trial and error that I tried to do anything with depth-first at all.
thor
Feel the white light, the light within
Be your own disciple, fan the sparks of will
For all of us waiting, your kingdom will come
| [reply] [Watch: Dir/Any] |
|