在 main.cpp 中撰寫一個函式,創建一個一定大小的隨機圖,如下所示。該函式有兩個引數。第一個引數是頂點數n。第二個引數 p (1 >= p >= 0) 是一對節點之間存在邊的概率。特別是,在實體化具有 n 個頂點和 0 條邊的圖之后,逐一遍歷所有可能的頂點對,并為每個這樣的對在頂點之間以概率 p 放置一條邊。
如何知道兩個頂點之間是否存在邊。
這是完整的問題

PS:我不需要代碼實作
uj5u.com熱心網友回復:
問題陳述清楚地表明,第一個輸入引數是節點數,第二個引數是p任意 2 個節點之間存在邊的概率。
您需要做的如下(更新以修正@user17732522指出的錯誤):
1- Create a bool matrix (2d nested array) of size n*n initialized with false.
2- Run a loop over the rows:
- Run an inner loop over the columns:
- if row_index != col_index do:
- curr_p = random() // random() returns a number between 0 and 1 inclusive
- if curr_p <= p: set matrix[row_index][col_index] = true
else: set matrix[row_index][col_index] = false
- For an undirected graph, also set matrix[col_index][row_index] = true/false based on curr_p
注意:由于我們在矩陣中設定兩個單元格(兩個方向)以防概率命中,我們可能會設定邊緣 2 次。這不會破壞概率的正確性,也不需要太多額外的作業。它有助于保持代碼干凈。
如果您想優化此解決方案,您可以運行回圈,以便您只訪問左下角三角形(不包括對角線),并將這些單元格的結果鏡像到右上角三角形。而已。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/417246.html
標籤:
