7-7 六度空間 (30 分)
「六度空間」理論又稱作「六度分隔(six degrees of separation)」理論。這個理論可以通俗地闡述為:「你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。」如圖1所示。
圖1 六度空間示意圖
假如給你乙個社交網路圖,請你對每個節點計算符合「六度空間」理論的結點佔結點總數的百分比。
輸入第1行給出兩個正整數,分別表示社交網路圖的結點數n(1,表示人數)、邊數m(≤,表示社交關係數)。隨後的m行對應m條邊,每行給出一對正整數,分別是該條邊直接連通的兩個結點的編號(節點從1到n編號)。
對每個結點輸出與該結點距離不超過6的結點數占結點總數的百分比,精確到小數點後2位。每個結節點輸出一行,格式為「結點編號:(空格)百分比%」。
10 9
1 22 3
3 44 5
5 66 7
7 88 9
9 10
1: 70.00%
題目分析:剛開始看我以為是得利用最短路徑的想法來解 但其實是利用廣度優先遍歷來 計算 對於每乙個圖節點都使用一次廣度優先遍歷 記錄每層的節點數 當一層的節點數隨著佇列的彈出減小到0時 進入下一層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%
注意:彈出層中的每個元素時 先進行對該元素 直接相連的元素入棧 再進行層數的判斷
1view code#define _crt_secure_no_warnings
2 #include3 #include4 #include
5#define maxvertexnum 1010
67 typedef struct enode*edge;
8struct
enode9;
1213 typedef struct gnode*graph;
14struct
gnode15;
2021 graph buildgraph(int
vertexnum)
2231
32void
insert(edge e, graph gra)
3337
38graph creategraph()
3951
return
g;52}53
int isedge(graph g,int i,int
j)54
5758
int colleted[1010
];59
int levelsize[1010
];60
float sum[1010
];61
int queue[1010
];62
int front = 1;63
int rear = 0;64
int size = 0;65
void
initialize()
6672 front = 1
;73 rear = 0
;74 size = 0;75
}76intisempty()
7780
int succ(int
num)
8187
void enqueue(int
num)
8893
intdequeue()
94100
101void bfs(graph g, int
i)102
124}
125if (levelsize[level]==0
)126 level++;
127}
128}
129void
print(graph g)
130136
}137
intmain()
138
PTA 資料結構與演算法題目集(中文)6 2
6 2 順序表操作集 20 分 本題要求實現順序表的操作集。list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,positio...
PTA 資料結構與演算法題目集(中文)6 5
6 5 鏈式表操作集 20 分 本題要求實現鏈式表的操作集。position find list l,elementtype x list insert list l,elementtype x,position p list delete list l,position p 其中list結構定義如...
PTA資料結構與演算法題目集(中文)7 18
題意 有兩個視窗a,b,題目給出a視窗處理完兩個顧客,b視窗處理完乙個顧客,並且當不同視窗同時處理完2個顧客時,a視窗顧客優先輸出。我們可以給出兩個佇列q1,q2分別表示a,b視窗,編號為奇數的顧客存放到q1中,為偶數的顧客存放到q2中。include include include include...