生成密度增加的图形

时间:2016-05-10 23:30:53

标签: c++ graph

我正在尝试创建一个函数,该函数将生成具有越来越多边的随机图。为了确保图形保持连接并且任意两个顶点之间至少有一条路径,我最初将图形中的所有顶点连接成“链”,然后向该链添加随机边。

我想知道我的功能是否正在执行我认为它正在做的事情(似乎是针对小图表,但很难验证更大的图表),还有更好的方法可以做到这一点吗?我觉得我的方法效率低下。

//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;
            }
        }
    }
}

0 个答案:

没有答案