Beispiel #1
0
        //====================================================================
        // 计算出所有结点上可能的路径,为路径数据提供数据准备
        //====================================================================
        public static void Calculate(ColumnFirstDynamicArray <ChainContent> apCost, int nValueKind)
        {
            InitNShortPath(apCost, nValueKind);

            QueueElement tmpElement;
            CQueue       queWork = new CQueue();
            double       eWeight;

            for (int nCurNode = 1; nCurNode < m_nNode; nCurNode++)
            {
                // 将所有到当前结点(nCurNode)可能的边根据eWeight排序并压入队列
                EnQueueCurNodeEdges(ref queWork, nCurNode);

                // 初始化当前结点所有边的eWeight值
                for (int i = 0; i < m_nValueKind; i++)
                {
                    m_pWeight[nCurNode - 1][i] = Predefine.INFINITE_VALUE;
                }

                // 将queWork中的内容装入m_pWeight与m_pParent
                tmpElement = queWork.DeQueue();
                if (tmpElement != null)
                {
                    for (int i = 0; i < m_nValueKind; i++)
                    {
                        eWeight = tmpElement.eWeight;
                        m_pWeight[nCurNode - 1][i] = eWeight;
                        do
                        {
                            m_pParent[nCurNode - 1][i].EnQueue(new QueueElement(tmpElement.nParent, tmpElement.nIndex, 0));
                            tmpElement = queWork.DeQueue();
                            if (tmpElement == null)
                            {
                                goto nextnode;
                            }
                        } while (tmpElement.eWeight == eWeight);
                    }
                }
                nextnode :;
            }
        }
Beispiel #2
0
        //====================================================================
        // ��������н���Ͽ��ܵ�·����Ϊ·�������ṩ����׼��
        //====================================================================
        public static void Calculate(ColumnFirstDynamicArray<ChainContent> apCost, int nValueKind)
        {
            InitNShortPath(apCost, nValueKind);

             QueueElement tmpElement;
             CQueue queWork = new CQueue();
             double eWeight;

             for (int nCurNode = 1; nCurNode < m_nNode; nCurNode++)
             {
            // �����е���ǰ��㣨nCurNode)���ܵı߸���eWeight����ѹ�����
            EnQueueCurNodeEdges(ref queWork, nCurNode);

            // ��ʼ����ǰ������бߵ�eWeightֵ
            for (int i = 0; i < m_nValueKind; i++)
               m_pWeight[nCurNode - 1][i] = Predefine.INFINITE_VALUE;

            // ��queWork�е�����װ��m_pWeight��m_pParent
            tmpElement = queWork.DeQueue();
            if (tmpElement != null)
            {
               for (int i = 0; i < m_nValueKind; i++)
               {
                  eWeight = tmpElement.eWeight;
                  m_pWeight[nCurNode - 1][i] = eWeight;
                  do
                  {
                     m_pParent[nCurNode - 1][i].EnQueue(new QueueElement(tmpElement.nParent, tmpElement.nIndex, 0));
                     tmpElement = queWork.DeQueue();
                     if (tmpElement == null)
                        goto nextnode;

                  } while (tmpElement.eWeight == eWeight);
               }
            }
             nextnode: ;
             }
        }
      //====================================================================
      // 计算出所有结点上可能的路径,为路径数据提供数据准备
      //====================================================================
      public  void Calculate(ColumnFirstDynamicArray<ChainContent> apCost, int nValueKind)
      {
         InitNShortPath(apCost, nValueKind);

         QueueElement tmpElement;
         CQueue queWork = new CQueue();
         double eWeight;

         for (int nCurNode = 1; nCurNode < m_nNode; nCurNode++)
         {
            // 将所有到当前结点(nCurNode)可能的边根据eWeight排序并压入队列
            EnQueueCurNodeEdges(ref queWork, nCurNode);

            // 初始化当前结点所有边的eWeight值
            for (int i = 0; i < m_nValueKind; i++)
               m_pWeight[nCurNode - 1][i] = Predefine.INFINITE_VALUE;

            // 将queWork中的内容装入m_pWeight与m_pParent
            tmpElement = queWork.DeQueue();
            if (tmpElement != null)
            {
               for (int i = 0; i < m_nValueKind; i++)
               {
                  eWeight = tmpElement.eWeight;
                  m_pWeight[nCurNode - 1][i] = eWeight;
                  do
                  {
                     m_pParent[nCurNode - 1][i].EnQueue(new QueueElement(tmpElement.nParent, tmpElement.nIndex, 0));
                     tmpElement = queWork.DeQueue();
                     if (tmpElement == null)
                        goto nextnode;

                  } while (tmpElement.eWeight == eWeight);
               }
            }
         nextnode: ;
         }
      }