コード例 #1
0
  // 5. Extract the node with the minimum key
  public int extractMin() {
    if (Nodes == null) return -1;

    BinomialHeapNode temp = Nodes, prevTemp = null;
    BinomialHeapNode minNode = Nodes.findMinNode();
    while (temp.key != minNode.key) {
      gen(13, temp, prevTemp);
      prevTemp = temp;
      temp = temp.sibling;
    }

    if (prevTemp == null) {
      gen(14, temp, prevTemp);
      Nodes = temp.sibling;
    } else {
      gen(15, temp, prevTemp);
      prevTemp.sibling = temp.sibling;
    }
    temp = temp.child;
    BinomialHeapNode fakeNode = temp;
    while (temp != null) {
      gen(16, temp, prevTemp);
      temp.parent = null;
      temp = temp.sibling;
    }

    if ((Nodes == null) && (fakeNode == null)) {
      gen(17, temp, prevTemp);
      size = 0;
    } else {
      if ((Nodes == null) && (fakeNode != null)) {
        gen(18, Nodes, fakeNode);
        Nodes = fakeNode.reverse(null);
        size = Nodes.getSize();
      } else {
        if ((Nodes != null) && (fakeNode == null)) {
          gen(19, Nodes, fakeNode);
          size = Nodes.getSize();
        } else {
          gen(20, Nodes, fakeNode);
          unionNodes(fakeNode.reverse(null));
          size = Nodes.getSize();
        }
      }
    }

    return minNode.key;
  }
コード例 #2
0
 private BinomialHeapNode reverse(BinomialHeapNode sibl) {
   BinomialHeapNode ret;
   if (sibling != null) ret = sibling.reverse(this);
   else ret = this;
   sibling = sibl;
   return ret;
 }