Advertisement
Darknesscrysis

MinPrioQueue

Apr 21st, 2020
1,035
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.08 KB | None | 0 0
  1. program MinPrioQueueMain;
  2.  
  3. {$MODE OBJFPC}
  4.  
  5. uses
  6.   uMinPrioQueue;
  7.  
  8. type
  9.   TIntegerArray = Array of Integer;
  10.  
  11. function NewNode(const aName: String; const aEdges: TNodeArray): TNode;
  12. begin
  13.   Result.Init(aName, aEdges);
  14. end;
  15.  
  16. function NewQueueNode(const aNode: TNode; const aKey: Integer): TQueueNode;
  17. begin
  18.   Result.Init(aNode, aKey);
  19. end;
  20.  
  21. procedure Main;
  22. var
  23.   queue: TMinPrioQueue;
  24.   n0, n1, n2, n3, min: TNode;
  25. begin
  26.   queue := TMinPrioQueue.Create;
  27.   n0 := NewNode('new york', TNodeArray.Create(n1, n2));
  28.   n1 := NewNode('london', TNodeArray.Create(n2));
  29.   n2 := NewNode('moscu', TNodeArray.Create(n1, n3));
  30.   n3 := NewNode('other city', nil);
  31.  
  32.   try
  33.     queue.Insert(NewQueueNode(n0, 40);
  34.     queue.Insert(NewQueueNode(n1, 20);
  35.     queue.Insert(NewQueueNode(n2, 10);
  36.     queue.Insert(NewQueueNode(n3, 40);
  37.     min := queue.GetMin;
  38.     DecreaseKey(n2.edges[1], 5);
  39.     min2 := queue.GetMin;
  40.   finally
  41.     queue.Free;
  42.   end;
  43.   WriteLn('min.name=',min.name,' min.idx=',min.idx);
  44.   WriteLn('min2.name=',min2.name,' min2.idx=',min2.idx);
  45. end;
  46.  
  47. begin
  48.   Main;
  49. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement