我正在尝试创建一个函数,该函数将生成具有越来越多边的随机图。为了确保图形保持连接并且任意两个顶点之间至少有一条路径,我最初将图形中的所有顶点连接成“链”,然后向该链添加随机边。
我想知道我的功能是否正在执行我认为它正在做的事情(似乎是针对小图表,但很难验证更大的图表),还有更好的方法可以做到这一点吗?我觉得我的方法效率低下。
//Generate a random graph
void Graph::generate(int numEdges) {
int currentEdges = 0;
int v1 = rand() % numVertices-1;
//Pick destination vertex. If 0 randomly generated, just add 1 to it
/*int dest = rand() % numVertices;
if (dest != 0) {
destination = dest;
} else {
destination = 1;
}*/
for(int i = 0; i < numVertices-1; i++) {
adjList[i].push_back(i+1);
adjList[i+1].push_back(i);
matrix[i][i+1] = 1;
matrix[i+1][i] = 1;
}
while(currentEdges < numEdges-(numVertices-1)) {
for(int i = 0; i < numVertices; i++) {
if(currentEdges == numEdges) {
break;
}
v1 = rand() % numVertices;
if (edgeExists(i, v1) == true || i == v1) {
} else {
adjList[i].push_back(v1);
adjList[v1].push_back(i);
matrix[i][v1] = 1;
matrix[v1][i] = 1;
currentEdges++;
//cout << "Added " << i << " to " << v1 << " list" << endl;
//cout << "Added " << v1 << " to " << i << " list" << endl;
}
}
}
}