示例#1
0
 public CyclicDependencySort(
     Converter <Node, IEnumerable <Node> > predecessors,
     Converter <Node, IEnumerable <Node> > successors,
     CanCreateNodeData <Node> data,
     CostUpdater updateCost)
 {
     this.successors = successors;
     bfs             = new BreadthFirstSearch <Node>(predecessors, data);
     this.updateCost = updateCost;
     queue           = new PriorityQueue <QueueEntry>(QueueEntry.Comparer);
     queue.Moved    += delegate(QueueEntry entry, int pos) { entry.QueuePosition = pos; };
     EntryOfNode     = data.CreateNodeData <QueueEntry>(null);
     visitCount      = 0;
     bfs.FinishNode += delegate(Node node)
     {
         QueueEntry entry = new QueueEntry();
         entry.ClosenessToTarget = ++visitCount;
         entry.Node        = node;
         entry.Cost        = Threshold;
         EntryOfNode[node] = entry;
         queue.Add(entry);
         UpdateEntry(entry);
     };
     IsScheduled = data.CreateNodeData <bool>(false);
 }
示例#2
0
 public CyclicDependencySort(IDirectedGraph <Node> dependencyGraph, CostUpdater updateCost)
     : this(dependencyGraph.SourcesOf, dependencyGraph.TargetsOf,
            (CanCreateNodeData <Node>)dependencyGraph, updateCost)
 {
 }