Beispiel #1
0
        //====================================================================
        // 将所有到当前结点(nCurNode)可能的边根据eWeight排序并压入队列
        //====================================================================
        private static void EnQueueCurNodeEdges(ref CQueue queWork, int nCurNode)
        {
            int    nPreNode;
            double eWeight;
            ChainItem <ChainContent> pEdgeList;

            queWork.Clear();
            pEdgeList = m_apCost.GetFirstElementOfCol(nCurNode);

            // Get all the edges
            while (pEdgeList != null && pEdgeList.col == nCurNode)
            {
                nPreNode = pEdgeList.row;             // 很特别的命令,利用了row与col的关系
                eWeight  = pEdgeList.Content.eWeight; //Get the eWeight of edges

                for (int i = 0; i < m_nValueKind; i++)
                {
                    // 第一个结点,没有PreNode,直接加入队列
                    if (nPreNode == 0)
                    {
                        queWork.EnQueue(new QueueElement(nPreNode, i, eWeight));
                        break;
                    }

                    // 如果PreNode的Weight == Predefine.INFINITE_VALUE,则没有必要继续下去了
                    if (m_pWeight[nPreNode - 1][i] == Predefine.INFINITE_VALUE)
                    {
                        break;
                    }

                    queWork.EnQueue(new QueueElement(nPreNode, i, eWeight + m_pWeight[nPreNode - 1][i]));
                }
                pEdgeList = pEdgeList.next;
            }
        }
Beispiel #2
0
        //====================================================================
        // �����е���ǰ��㣨nCurNode�����ܵı߸���eWeight����ѹ�����
        //====================================================================
        private static void EnQueueCurNodeEdges(ref CQueue queWork, int nCurNode)
        {
            int nPreNode;
             double eWeight;
             ChainItem<ChainContent> pEdgeList;

             queWork.Clear();
             pEdgeList = m_apCost.GetFirstElementOfCol(nCurNode);

             // Get all the edges
             while (pEdgeList != null && pEdgeList.col == nCurNode)
             {
            nPreNode = pEdgeList.row;  // ���ر�����������row��col�Ĺ�ϵ
            eWeight = pEdgeList.Content.eWeight; //Get the eWeight of edges

            for (int i = 0; i < m_nValueKind; i++)
            {
               // ��һ����㣬û��PreNode��ֱ�Ӽ������
               if (nPreNode == 0)
               {
                  queWork.EnQueue(new QueueElement(nPreNode, i, eWeight));
                  break;
               }

               // ���PreNode��Weight == Predefine.INFINITE_VALUE����û�б�Ҫ������ȥ��
               if (m_pWeight[nPreNode - 1][i] == Predefine.INFINITE_VALUE)
                  break;

               queWork.EnQueue(new QueueElement(nPreNode, i, eWeight + m_pWeight[nPreNode - 1][i]));
            }
            pEdgeList = pEdgeList.next;
             }
        }
      //====================================================================
      // 将所有到当前结点(nCurNode)可能的边根据eWeight排序并压入队列
      //====================================================================
      private  void EnQueueCurNodeEdges(ref CQueue queWork, int nCurNode)
      {
         int nPreNode;
         double eWeight;
         ChainItem<ChainContent> pEdgeList;

         queWork.Clear();
         pEdgeList = m_apCost.GetFirstElementOfCol(nCurNode);

         // Get all the edges
         while (pEdgeList != null && pEdgeList.col == nCurNode)
         {
            nPreNode = pEdgeList.row;  // 很特别的命令,利用了row与col的关系
            eWeight = pEdgeList.Content.eWeight; //Get the eWeight of edges

            for (int i = 0; i < m_nValueKind; i++)
            {
               // 第一个结点,没有PreNode,直接加入队列
               if (nPreNode == 0)
               {
                  queWork.EnQueue(new QueueElement(nPreNode, i, eWeight));
                  break;
               }

               // 如果PreNode的Weight == Predefine.INFINITE_VALUE,则没有必要继续下去了
               if (m_pWeight[nPreNode - 1][i] == Predefine.INFINITE_VALUE)
                  break;

               queWork.EnQueue(new QueueElement(nPreNode, i, eWeight + m_pWeight[nPreNode - 1][i]));
            }
            pEdgeList = pEdgeList.next;
         }
      }