資料結構之六度空間

2021-09-13 01:17:06 字數 2462 閱讀 2245

實驗題目:

「六度空間」理論又稱作「六度分隔(six degrees of separation)」理論。這個理論可以通俗地闡述為:「你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。」

也就是在無向圖中,以節點作為人,兩個節點之間的路徑小於等於6。

實驗要求

求出與乙個節點滿足上述要求的其他節點的數目,初始值為1

如圖 以a, b為例

a: 沒有與a滿足上述條件的點.因此。a節點的值為0

b: d c e h g f都滿足條件 因此b節點的值就是7

實驗思路:

即無向圖的廣度優先遍歷

1.圖的儲存

書上講過無向圖的儲存最好是鄰接多重鍊錶,但是看起來比較麻煩,我就偷懶用了鄰接表來儲存

建立方式,定義表頭節點和表節點

typedef struct edgenode

edgenode;

//頂點表節點結構,tag用來判定是否被遍歷過,乙個firstedge是用來指向邊表的第乙個節點

typedef struct

adjlist;

定義表頭節點的陣列,表的初始化就完成了。

儲存圖,忽略節點名字,以陣列下標代替節點名。tag初始為0,輸入一條邊的頭尾節點,在頭尾節點對應的表頭節點後加入資訊。

實現**

void add(int x, int y) 

else

q = new edgenode;

q->adjvex = y - 1;

q->next = null;

p->next = q;

}// 無向圖,一條邊對應兩個結點

if (adjlist[y - 1].firstedge == null)

else

q = new edgenode;

q->adjvex = x - 1;

q->next = null;

p->next = q;}}

2.圖的廣度優先遍歷

在上述儲存結構的前提下,以每個節點為初始節點,依次進行廣度優先遍歷

思路:定義兩個佇列,用來儲存本次訪問節點的下標和下次訪問節點的下標,以便於計算路徑長度。在本次訪問節點佇列不空的情況下,再次進行迴圈,直到空為止,迴圈第一次結束。依次類推

下面以圖的形式具體說明

第一次以0下標開始,tag置為1,表示被訪問過。本次佇列和下次佇列都為null

首先進行本次佇列賦值,此時路徑為1

之後再本次佇列不為空並且路徑小於6的前提下進行另乙個迴圈

①以本次佇列中的資料作為起始位置,若遍歷的節點中,tag為0,則該節點進入下次佇列,直到本次佇列空為止。此時資料的狀態為

此時將下次佇列的值賦給本次佇列,此時路徑變為2

繼續進行迴圈①

①迴圈結束之後 將所有tag置為0,佇列清空進行以下乙個節點為初始節點的計算,重複上述過程直到迴圈結束

實現**

void bl(int x)

queueq;

queuer;

for (int i = 0; i < num_vertex; i++)

if (!p->next)

if (p->next)

}k++;

// 記錄路徑長度為2~6的節點個數,q佇列中存入本次次廣度遍歷的節點,r佇列存入下一次廣度

// 遍歷的節點。來區分不同的路徑長度

while (!q.empty() && k < 6)

if (!p->next)

else p = p->next;

}if (q.empty() && !r.empty())

k++;}}

// 初始化資料,準備進行從下乙個節點開始的廣度遍歷

for (int j = 0; j < num_vertex; j++)

while (!q.empty())

while (!r.empty())

}

資料結構 六度空間(模擬六度分隔理論)

六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。如圖1所示。圖1 六度空間示意圖 假如給你乙個社交網路圖,請你對每個節點計算符合 六度...

六度空間 MOOC浙大資料結構

include include include include define max 10001 using namespace std int matgra max max int visit max 根據變數動態建立一維陣列 int bfs int node,int n if tmpnode l...

7 7 六度空間

六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。如圖1所示。圖1 六度空間示意圖 假如給你乙個社交網路圖,請你對每個節點計算符合 六度...