六度空間」理論又稱作「六度分隔(six degrees of separation)」理論。這個理論可以通俗地闡述為:「你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。」如圖1所示。
圖1 六度空間示意圖
輸入第1行給出兩個正整數,分別表示社交網路圖的結點數n(11091
2233
4455
6677
8899
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
%
dir:用bfs遍歷然後除於總人數,輸出認識的人佔總人數的百分比。鄰接表寫起來有點麻煩,這題開個二維的也可以過或者vector也可以。。。。鄰接表的寫法是按照mooc上陳越姥姥的方法。。。
鄰接表
#include
#include
#include
#include
using
namespace std;
#define n 1005
//最大頂點數
#define mem(a) memset(a,0,sizeof(a))
typedef
struct enode *prtoenode;
struct enode
;typedef prtoenode edge ;
typedef
struct adjv *prtoadjv;
struct adjv
;typedef
struct vnodeadjlist[n]
;typedef
struct gnode *prtognode;
struct gnode
;typedef prtognode lgraph;
struct state
;int vist[n]
;//用來標記當前頂點有沒有被訪問,0表示沒有,1表示有
intbfs
(int
,lgraph)
;//bfs遍歷
lgraph creatlgraph
(int);
//初始化鄰接表
void
insert
(lgraph,edge)
;//往表裡插入邊的資訊
lgraph buildlgraph()
;//建表
intmain()
return0;
}lgraph creatlgraph
(int nv)
return graph;
}void
insert
(lgraph graph, edge e)
lgraph buildlgraph()
return graph;
}int
bfs(
int x,lgraph graph)
q.pop();
vist[temp.v]=1
;struct vnode t = gt-
>g[temp.v]
;while
(t.firstnext)
t.firstnext=t.firstnext-
>next;}}
return cnt;
}
7 7 六度空間 (30 分)
題目鏈結 這個題用光蒐做,從網上看的,我一開始以為是深搜,寫半天沒寫出來。最後從網上看要用廣搜做,想了半天,還覺得應該用深搜,無奈的我回到我的床上,躺下吃了兩粒花生公尺,仔細思考了一下,就想出來廣搜怎麼做了!沉下心來,坐在電腦面前沒有躺在床上思考的更犀利。我記得以前也有乙個模擬鍊錶的題也是在床上臨睡...
7 7 六度空間 30分
六度空間 理論又稱作 六度分隔 six degrees of separation 理論。這個理論可以通俗地闡述為 你和任何乙個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何乙個陌生人。如圖1所示。假如給你乙個社交網路圖,請你對每個節點計算符合 六度空間 理論的結點佔結點...
7 7 六度空間 30分
假如給你乙個社交網路圖,請你對每個節點計算符合 六度空間 理論的結點佔結點總數的百分比。輸入第1行給出兩個正整數,分別表示社交網路圖的結點數n 1對每個結點輸出與該結點距離不超過6的結點數占結點總數的百分比,精確到小數點後2位。每個結節點輸出一行,格式為 結點編號 空格 百分比 10 9 1 22 ...