3 // author: Dan Lewis (dihlewis@yahoo.co.uk)
\r
8 using System.Collections;
\r
10 class DependencyGraph {
\r
11 public DependencyGraph () {
\r
12 nodes = new Hashtable ();
\r
15 public void AddNode (object o) {
\r
16 if (!nodes.Contains (o))
\r
17 nodes.Add (o, new Node (o));
\r
20 public void AddEdge (object from, object to) {
\r
21 if (!nodes.Contains (from))
\r
23 if (!nodes.Contains (to))
\r
26 Node from_node = (Node)nodes[from];
\r
27 Node to_node = (Node)nodes[to];
\r
29 from_node.edges.Add (to_node);
\r
32 public IList TopologicalSort () {
\r
33 foreach (Node node in nodes.Values)
\r
34 node.marked = false;
\r
36 IList list = new ArrayList ();
\r
37 foreach (Node node in nodes.Values) {
\r
47 private void Visit (Node node, IList list) {
\r
49 foreach (Node adj in node.edges) {
\r
54 list.Insert (0, node.value);
\r
57 private class Node {
\r
58 public Node (object o) {
\r
60 this.edges = new ArrayList ();
\r
63 public object value;
\r
64 public ArrayList edges;
\r
68 private Hashtable nodes;
\r