路由模拟——路由算法1的实现(结点集合类)

类别:VC语言 点击:0 评论:0 推荐:

 

 

//文件nodeset.h

#pragma once

#include "resource.h"

using namespace GeneResource;

 

class NodeSet

{

public:

 

     NodeSet(void)

         : nodeNum(0)

         , nodeArray(NULL)

     {

     }

 

     NodeSet(int _nodeNum)

     {

          nodeNum = _nodeNum;

          nodeArray = new int[GENE_LENGTH];

          for(int i=0;i<GENE_LENGTH;i++)

              nodeArray[i]=-1;

     }

 

     NodeSet(NodeSet &_nodeSet)

     {

          nodeNum = _nodeSet.nodeNum;

          nodeArray = new int[GENE_LENGTH];

          for(int i=0;i<GENE_LENGTH;i++)

              nodeArray[i]=*(_nodeSet.nodeArray+i);

     }

 

     ~NodeSet(void)

     {

          Clear();

     }

public:

 

     void SetNodeNum(int _nodeNum)

     {

          Clear();

 

          nodeNum = _nodeNum;

          nodeArray = new int[GENE_LENGTH];

          for(int i=0;i<GENE_LENGTH;i++)

              nodeArray[i]=-1;//空集合

     }

 

     void Clear(void)

     {

          if(nodeArray!=NULL)

              delete []nodeArray;

     }

 

     int *& GetpNodeSet()

     {

         return nodeArray;

     }

 

     int GetNodeNum()

     {

         return nodeNum;

     }

 

     friend int RANDOM(NodeSet &_nodeSet)

     {

         int n=0,MAX=0;

         double p = 0.0;

          for(int i=0;i<GENE_LENGTH;i++)

              if( *(_nodeSet.nodeArray+i) != -1)

                   MAX ++;

         //0.1的概率选择失败

         p = RandInteger(1000);

          if( p/1000 > 0.9 )

              return -1;

         //随即选择结点

         n = RandInteger(MAX);

          if(_nodeSet.nodeArray!=NULL)

              return *(_nodeSet.nodeArray+n);

         else

              return -1;

     }

 

     //获得最后一个结点的标号;返回-1为空

     int GetLastIndex()

     {

          for(int i=0;i<GENE_LENGTH;i++)

              if(*(nodeArray+i) == -1)

                   return i-1;

          return -1;

     }

 

     //从_nodeSet1中减去也在_nodeSet2出现的结点

     friend NodeSet & operator -(NodeSet &_nodeSet1,NodeSet &_nodeSet2)

     {

         //TODO: return statement

         int n=_nodeSet1.nodeNum;

         int k=0;

         bool bVal=true;

          NodeSet *nodeSet=new NodeSet(n);

          for(int i=0;i<GENE_LENGTH;i++)

         {

              for(int j=0;j<GENE_LENGTH;j++)

                   if( *(_nodeSet1.nodeArray+i)

                       == *(_nodeSet2.nodeArray+j) )

                   {

                        bVal=false;

                       break;

                   }

 

              if(bVal)

              {

                   *(nodeSet->nodeArray+k)=*(_nodeSet1.nodeArray+i);

                   k++;

              }else

                   bVal=true;

         }

         return *nodeSet;

     }

 

     void operator =(NodeSet &_nodeSet)

     {

          if(nodeNum!=_nodeSet.nodeNum)

              SetNodeNum(_nodeSet.nodeNum);

        

          for(int i=0;i<GENE_LENGTH;i++)

              *(nodeArray+i)=*(_nodeSet.nodeArray+i);

     }

private:

     int nodeNum;

     int *nodeArray;

};

 

本文地址:http://com.8s8s.com/it/it942.htm