您的位置:首页 > 其它

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

2004-05-07 22:33 477 查看
//文件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;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: