傳送門
題目描述:假如給你乙個社交網路圖,請你對每個節點計算符合「六度空間」理論的結點佔結點總數的百分比。
輸入格式:
輸入第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%
樣例示意圖:
題目思路:
由題意知,該題邊數遠遠大於頂點數,若建圖,則圖為稀疏圖,而稀疏圖用鄰接表建圖較為穩妥。
#include
#include
//malloc()函式標頭檔案。
#include
//memset()函式標頭檔案。
int visited[
1001];
//0-該頂點未被訪問過,1-該頂點已經被訪問過了。
//定義邊結點的結構體
struct enode
;typedef
struct enode* edge;
/*typedef定義新的資料型別,相當於給邊結點的結構體指標取了乙個別名,名為edge。
edge即struct enode*。*/
/*typedef定義新的資料型別,相當於給鄰接點的結構體指標取了乙個別名,名為ptrtoadjvnode。
ptrtoadjvnode即struct adjvnode*。*/
typedef
struct adjvnode* ptrtoadjvnode;
//定義鄰接點的結構體。
struct adjvnode
;typedef
struct vnodeadjlist[
1001];
//adjlist是鄰接表型別。
/*圖結構體的定義*/
struct gnode
;typedef
struct gnode* lgraph;
/*typedef定義新的資料型別,相當於給圖的結構體指標取了乙個別名,名為lgraph。
lgraph即struct gnode*。*/
/*迴圈佇列的結構體定義*/
struct qnode
;typedef
struct qnode* queue;
/*typedef定義新的資料型別,相當於給迴圈佇列的結構體指標取了乙個別名,名為queue。
queue即struct qnode*。*/
/*佇列的建立*/
queue createqueue
(int maxsize)
/*判斷佇列是否滿*/
intisfull
(queue q)
/*判斷佇列是否為空*/
intisempty
(queue q)
/*出隊*/
intdeleteq
(queue q)
else
}/*入隊*/
intaddq
(queue q,
int x)
else
}/*圖的建立*/
lgraph creategraph
(int n)
intbfs
(lgraph graph,
int s)
//廣度優先遍歷。}if
(i==last)
if(level==6)
break;}
return count;
}void
six_degree_of_separation
(lgraph graph)
}void
insertedge
(lgraph graph,edge e)
lgraph buildgraph()
return graph;
}int
main()
傳送門 7 7 六度空間
六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。如圖1所示。圖1 六度空間示意圖 假如給你乙個社交網路圖,請你對每個節點計算符合 六度...
7 7 六度空間
7 7 六度空間 30 分 六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。如圖1所示。圖1 六度空間示意圖 假如給你乙個社交網路圖,...
7 7 六度空間
六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。如圖1所示。圖1 六度空間示意圖 假如給你乙個社交網路圖,請你對每個節點計算符合 六度...