2009-11-30 92 views
1

我需要模擬一個離散事件模擬器,爲此我需要生成一個由30個節點組成的網絡,然後檢查生成的圖形是否是定向的。任何人都可以指導我如何開始這一點。我不應該使用boost庫來做到這一點。是的,這是一項任務,我需要一個建議來開始。我只需要幾個指針就可以繼續。作業:生成圖形

#define MAXNODES 30 

struct { 
int p; 
int *incoming; 
int *outgoing; 
} NODE[MAXNODES] 
//The struct defines each node and the neighbors to it. 

上述結構定義是否正確?

+1

「開始建議」應該來自您的老師或助教,而不是某個網站。 – 2009-11-30 16:34:12

+0

__SOME WEB SITE__? – bobobobo 2009-12-06 04:16:14

回答

1

我假設您可能會生成任何隨機圖。我還假設你熟悉圖的鄰接矩陣表示。

如果是這樣,我會使用adjacency matrix表示圖。你會用二維數組來表示這個。

所以你的圖形將被定義爲:

#define MAXNODES 30 
int graph[MAXNODES][MAXNODES]; 

是您的圖形加權或加權?如果未加權,則矩陣的每個元素(例如graph[3][7])將具有0或1.如果它是0,則沒有邊連接節點3和7(在此示例中),並且如果存在是1,那麼確實有一個優勢。

如果它的加權,則0仍然意味着沒有邊,但是一個數(1,9,234,任何)表示該邊的權重。

因此,您可以使用循環爲每個數組元素填充一個數字 - 因此,請通過每對節點並隨機分配一個權重(0表示沒有邊或一些數字,如果有邊的話)加權vs未加權)。

所以要回答你的問題,檢查「定向」是很容易的。如果一個圖被引導,則圖[3] [7]和圖[7] [3]將具有相同的值。所以你可以檢查每一對(圖[i] [j]和圖[j] [i]),看看這些值是否相等。你看到矩陣是否爲symmetric。如果它不是對稱的(所以[3] [7]具有0,但[7] [3]具有1),那麼在一個方向上只有一個邊 - 使其指向。如果每一對都有兩個值([3] [7] = 5,[7] [3] = 21),那麼該圖就會被引導,因爲重量會根據您所行駛的方向而變化。

+0

是的,實現了鄰接矩陣同樣是使用二維數組,它是一個未加權的圖。與鏈接的連接使用概率函數進行計算。如果返回的值<0.5,那麼就沒有連接,並且節點被賦值爲0,或者如果> 0.5,那麼它是1.是的,這是一個有向圖。感謝您的建議。 – Chaitanya 2009-12-02 23:07:13

0

我認爲你需要首先定義你的'定向性'的特定版本。決定一個節點是否先於另一個節點的基礎是什麼?例如,您是否要爲每個節點分配一個隨機數?如果是這樣,你的結構似乎不完整。它至少需要額外的數據元素來保存該節點的位置值...