簡體   English   中英

生成無向隨機圖

[英]generating random graph undirected

每當我嘗試使 adj_matrix[u][v] == adj_matrix[v][u] 的重量相同時,我都需要幫助,它不適用,誰能告訴我我是否在正確的道路上?

有沒有辦法將沒有邊緣的矩陣設置為 X 而不是 0?

  int gen_random_graph(int n)
 {
    srand(time(0));
    int adj_matrix[n][n];
    for(int u = 0; u < n; u++)
    {
        for (int v = u; v < n; v++)   //generating a N x N matrix  based on the # of vertex input
        {
            bool edgeOrNot = rand() % 2;   //decide whether it has an edge or not
            adj_matrix[u][v] = adj_matrix[v][u] = edgeOrNot;
            cout << u << " " << v << " " << adj_matrix[u][v] << endl;
            if(adj_matrix[u][v] == true)
            {
                adj_matrix[v][u] = true;
                if(u == v)                            //We can't have i = j in an undirected graph
                {
                    adj_matrix[u][v] = -1;
                }
                cout << u << " " << v << " " << adj_matrix[u][v] << endl;
            }
            else
            {
                adj_matrix[v][u] = -1;
                cout << u << " " << v << " " << adj_matrix[u][v] << "else" <<  endl;
            }
        }

    }

    for(int i = 0; i < n; i++)
    {
        for(int j = i; j < n; j++)           //create the N x N with edges and sets the weight between the edge randomly
        {
            if(adj_matrix[i][j] == true)
            {
                    int weight1 = rand()%10 + 1;
                    adj_matrix[i][j] = adj_matrix[j][i] = weight1;
                    cout << " ( " << i << "," << j << " ) " << "weight: " << adj_matrix[i][j] << endl;
            }
        }
    }
}
int main()
{
    int N;
    cout << "Enter number of vertices" << endl;
    cin >> N;
    gen_random_graph(N);

    return 0;
}

我建議使用 -1 值代替 'X'。 有一個示例:

void gen_random_graph(int n) {
    srand(time(0));
    int adj_matrix[n][n];

    for(int u = 0; u < n; u++) {
        for (int v = u; v < n; v++) { //you don't need to calculate weight twice so loop starts from u
            if(v == u) {
                adj_matrix[u][v] = -1;
            }
            else {
                int weight = rand() % 10 - 1;
                adj_matrix[u][v] = adj_matrix[v][u] = weight;
            }
        }
    }
}

現在您可以檢查邊緣的值。 對於 -1 它不存在。

我不確定你的算法等等。 使用int adj_matrix存儲boolint adj_matrix ,但存儲'X' ,我會避免使用char

為了存儲相同的權重,我會嘗試:

const int weight = rand() % 10 + 1;
adj_matrix[u][v] = weight;
adj_matrix[v][u] = weight;

編譯器可能會嘗試調用rand()兩次,每個語句調用一次。 在上面你只調用rand()一次。

一般來說,我會使用 STL 容器,例如std::vector<int>std::vector<std::vector<int>> ,盡管后者從內存占用的角度來看並不理想。

我會使用std::numeric_limits<int>::minmax代替'X' ,它們可能不等於rand() % 10 + 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM