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

2021-09-19 23:01:45 字數 3226 閱讀 3506

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

圖1 六度空間示意圖

假如給你乙個社交網路圖,請你對每個節點計算符合「六度空間」理論的結點佔結點總數的百分比。

輸入第1行給出兩個正整數,分別表示社交網路圖的結點數n(1對每個結點輸出與該結點距離不超過6的結點數占結點總數的百分比,精確到小數點後2位。每個結節點輸出一行,格式為「結點編號:(空格)百分比%」。

10 9

1 22 3

3 44 5

5 66 7

7 88 9

9 10

1: 70.00%

2: 80.00%

3: 90.00%

4: 100.00%

5: 100.00%

6: 100.00%

7: 100.00%

8: 90.00%

9: 80.00%

10: 70.00%

case

hint

result

run time

memory

0sample 簡單一條鏈

accepted

2 ms

384 kb

1不連通

accepted

2 ms

416 kb

2一般圖

accepted

3 ms

416 kb

3最小n和m

accepted

2 ms

416 kb

4最大n和m

accepted

497 ms

2592 kb

#includeusing namespace std;

#define maxvertexnum 10000//最多頂點(結點)數

#define maxdistance 6//bfs廣度優先搜尋允許遍歷到的層數

#define defaultweight 1//無邊的權重要求,則預設為1

#define qerror 0//佇列發生錯誤

typedef int vertex;//用頂點下標表示頂點

typedef int weighttype;//邊的權重

//定義圖的邊

typedef struct enode *ptrtoenode;

struct enode;

typedef ptrtoenode edge;

//鄰接點的定義

typedef struct adjvnode *ptrtoadjvnode;

struct adjvnode;

//頂點表頭的定義

typedef struct vnode adjlist[maxvertexnum];//adjlist是鄰接表型別

//圖結點的定義

typedef struct gnode *ptrtognode;

struct gnode;

typedef ptrtognode lgraph;//以鄰接表方式儲存的圖型別

//佇列的結點定義

typedef struct node *ptrtonode;

struct node;

typedef ptrtonode position;

//佇列的定義

struct qnode;

typedef struct qnode *queue;//以鍊錶的形式實現佇列

lgraph creategraph(int nv);

void insertedge(lgraph graph, edge e);

void bfstosix(lgraph graph);

int bfs(lgraph graph, vertex v);

queue createqueue(int maxsize);

bool qisempty(queue q);

vertex deleteq(queue q);

void addq(queue q, vertex v);

int main()

; int v2arr[m] = ;

edge e;

e = new enode;

for(int e=0; ev1 = v1arr[e];

e->v2 = v2arr[e];

e->weight = defaultweight;

insertedge(graph, e);

}bfstosix(graph);

*///正式應用

int n, m;

lgraph graph;

edge e;

cin >> n; //輸入結點總數

graph = creategraph(n); //建立無邊圖

cin >> m; //輸入邊的個數

e = new enode;

for(int i=0; i> e->v1;

cin >> e->v2;

e->weight = defaultweight;

insertedge(graph, e);

}bfstosix(graph);//六度分隔理論模擬

return 0;

}void bfstosix(lgraph graph)

}}int bfs(lgraph graph, vertex v)

for(w=graph->g[v].firstedge; w != null; w=w->next)}}

return sixvertexnum;

}void insertedge(lgraph graph, edge e)

lgraph creategraph(int n)

queue createqueue(int maxsize)

bool qisempty(queue q)

void addq(queue q, vertex v)

else

}vertex deleteq(queue q)

else

}

六度分隔理論

mnoz 2005 11 17 12 53 21 六度分隔理論 六度分隔 six degrees of separation 理論。1967年 哈佛大學的心理學教授stanley milgram 1933 1984 想要描繪乙個鏈結人與社群的人際連繫網。做過一次連鎖信實驗,結果發現了 六度分隔 現象...

六度分隔理論

小世界現象 又稱小世界效應 假設世界上所有互不相識的人只需要很少中間人就能建立起聯絡。六度分隔理論 six degrees of separation 後來1967年 哈佛大學的心理學教授斯坦利 公尺爾格拉姆 stanley milgram,1933年 1984年 根據這概念做過一次連鎖信實驗,嘗試...

資料結構之六度空間

實驗題目 六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。也就是在無向圖中,以節點作為人,兩個節點之間的路徑小於等於6。實驗要求 求出...