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); }
public CyclicDependencySort(IDirectedGraph <Node> dependencyGraph, CostUpdater updateCost) : this(dependencyGraph.SourcesOf, dependencyGraph.TargetsOf, (CanCreateNodeData <Node>)dependencyGraph, updateCost) { }