一般来说,创建一个无向图 adt 应该需要很长时间吗?
如果我有一个包含 40 个节点的图,并且每个节点都连接到 20% 的其他节点,那么当我的程序尝试将节点链接在一起时,它就会停止。
我真正能达到的最大值是 20 个节点的 20% 密度。我将顶点链接在一起的代码如下所示:
while(CalculateDensity()){
LinkRandom();
numLinks++;
}
void LinkRandom(){
int index = rand()%edgeList.size();
int index2 = rand()%edgeList.size();
edgeList.at(index).links.push_back(edgeList.at(index2));
edgeList.at(index2).links.push_back(edgeList.at(index));
}
有什么办法可以更快地做到这一点?
编辑:这是数据结构声明的地方:
for(int i=0; i<TOTAL_NODES; i++){
Node *ptr = new Node();
edgeList.push_back(*ptr); //populate edgelist with nodes
}
cout<<"edgelist populated"<<endl;
cout<<"linking nodes..."<<endl;
while(CalculateDensity()){
LinkRandom();
numLinks++;
}