/// <inheritdoc /> public IEnumerator <KeyValuePair <TPriority, TValue> > GetEnumerator() { var tempHeap = new FibonacciHeap <TPriority, TValue>(Direction, PriorityComparison); var cellsStack = new Stack <FibonacciHeapCell <TPriority, TValue> >(); _cells.ForEach(x => cellsStack.Push(x)); while (cellsStack.Count > 0) { FibonacciHeapCell <TPriority, TValue> topCell = cellsStack.Peek(); tempHeap.Enqueue(topCell.Priority, topCell.Value); cellsStack.Pop(); topCell.Children?.ForEach(x => cellsStack.Push(x)); } while (!tempHeap.IsEmpty) { yield return(tempHeap.Top.ToKeyValuePair()); tempHeap.Dequeue(); } }
/// <inheritdoc /> public void Enqueue([NotNull] TVertex value) { _cells[value] = _heap.Enqueue(_distanceFunc(value), value); }