public void Add(KeyNode node) { HeapArray[currentIndex] = node; IndexeMap[node.Index] = currentIndex; HeapifyUp(currentIndex); ++currentIndex; }
public KeyNode ExtractMin() { KeyNode minNode = null; if (Size > 0) { Swap(0, Size - 1); minNode = HeapArray[Size - 1]; --Size; Heapify(0); } return(minNode); }
static void PrimsAlgorithm(int v) { int[] Parent = new int[v]; Parent[0] = -1; MinHeapMap PriorityQueue = new MinHeapMap(v); var keyNode = new KeyNode { Weight = 0, Index = 0 }; PriorityQueue.Add(keyNode); for (int i = 1; i < v; i++) { Parent[i] = -1; keyNode = new KeyNode { Weight = int.MaxValue, Index = i }; PriorityQueue.Add(keyNode); } while (PriorityQueue.Size > 0) { KeyNode Node = PriorityQueue.ExtractMin(); var childNodes = graph.adj[Node.Index]; foreach (var childNode in childNodes) { int ReferenceWeight = PriorityQueue.GetWeight(childNode.Index); int OriginalWeight = childNode.Weight; if (PriorityQueue.Contains(childNode.Index) && ReferenceWeight > OriginalWeight) { PriorityQueue.Update(childNode.Index, OriginalWeight); Parent[childNode.Index] = Node.Index; } } } for (int i = 0; i < v; i++) { Console.WriteLine(Parent[i] + " is Parent of" + "Index: " + i); } }