コード例 #1
0
 private void HeapyfiToUp(int i)
 {
     if (isMin)
     {
         int father = GetFather(i);
         if (father > -1 && array[father].Prioridad > array[i].Prioridad)
         {
             NodoColaPHeap t = array[father];
             array[father] = array[i];
             array[i]      = t;
             HeapyfiToUp(father);
         }
     }
     else
     {
         int father = GetFather(i);
         if (father > -1 && array[father].Prioridad < array[i].Prioridad)
         {
             NodoColaPHeap t = array[father];
             array[father] = array[i];
             array[i]      = t;
             HeapyfiToUp(father);
         }
     }
 }
コード例 #2
0
 private void Add(NodoColaPHeap p)
 {
     if (array.Length == count)
     {
         NodoColaPHeap[] t = new NodoColaPHeap[array.Length * 2];
         for (int i = 0; i < array.Length; i++)
         {
             t[i] = array[i];
         }
         t[count] = p;
         array    = t;
     }
 }
コード例 #3
0
 public void Insert(NodoColaPHeap p)
 {
     if (array.Length == count)
     {
         Add(p);
     }
     else
     {
         array[count] = p;
     }
     count++;
     HeapyfiToUp(count - 1);
 }
コード例 #4
0
        private void HeapyfiToDown(int i)
        {
            if (isMin)
            {
                #region HeapyFi To down Min
                int l = GetLeftSon(i);
                int r = GetRightSon(i);

                if (r < count)
                {
                    NodoColaPHeap right = array[r];
                    NodoColaPHeap left  = array[l];
                    int           t;
                    if (right != null && left != null)
                    {
                        t = left.Prioridad < right.Prioridad ? l : r;
                    }
                    else if (right != null)
                    {
                        t = r;
                    }

                    else if (left != null)
                    {
                        t = l;
                    }
                    else
                    {
                        return;
                    }

                    if (array[t].Prioridad < array[i].Prioridad)
                    {
                        NodoColaPHeap temp = array[t];
                        array[t] = array[i];
                        array[i] = temp;
                        HeapyfiToDown(t);
                    }
                }
                else if (l < count)
                {
                    NodoColaPHeap left = array[l];
                    int           t;
                    if (left != null)
                    {
                        t = l;
                    }
                    else
                    {
                        return;
                    }
                    if (array[t].Prioridad < array[i].Prioridad)
                    {
                        NodoColaPHeap temp = array[t];
                        array[t] = array[i];
                        array[i] = temp;
                        HeapyfiToDown(t);
                    }
                }
                #endregion
            }
            else
            {
                #region HeapyFi To down NOT Min
                int l = GetLeftSon(i);
                int r = GetRightSon(i);

                if (r < count)
                {
                    NodoColaPHeap right = array[r];
                    NodoColaPHeap left  = array[l];
                    int           t;
                    if (right != null && left != null)
                    {
                        t = left.Prioridad > right.Prioridad ? l : r;
                    }
                    else if (right != null)
                    {
                        t = r;
                    }

                    else if (left != null)
                    {
                        t = l;
                    }
                    else
                    {
                        return;
                    }

                    if (array[t].Prioridad > array[i].Prioridad)
                    {
                        NodoColaPHeap temp = array[t];
                        array[t] = array[i];
                        array[i] = temp;
                        HeapyfiToDown(t);
                    }
                }
                else if (l < count)
                {
                    NodoColaPHeap left = array[l];
                    int           t;
                    if (left != null)
                    {
                        t = l;
                    }
                    else
                    {
                        return;
                    }
                    if (array[t].Prioridad > array[i].Prioridad)
                    {
                        NodoColaPHeap temp = array[t];
                        array[t] = array[i];
                        array[i] = temp;
                        HeapyfiToDown(t);
                    }
                }
                #endregion
            }
        }