看了中国大学MOOC网上陈越老师对于数据结构中图的讲解,深受启发。
下面我将她讲过的一个图的理论——六度空间(Six Degree Of Separation)
中的思想阐述如下:
首先说明算法的思路:
①对于每个节点,进行BFS
②搜索的过程中累计访问的节点数
③需记录“层"数,仅计算6层以内的节点数
void SDS()
{
for(each V in G){
count = BFS(V);
output(count/N);
}
}
void BFS(Vertex V)
{
visited[V] = true;
Enqueue(V,Q);
while(!IsEmpty(Q))
{
V = Dequeue(Q);
for(V的每个邻接点W)
if(!visited[w])
{
visited[w]=true;
Enqueue(W,Q);
//count++;
}
}
return ;//count
}
int BFS(Vertex V)
{
visited[V]=true;
count=1;
Enqueue(V,Q);
while(!IsEmpty(Q))
{
V = Dequeue(Q);
for(V的每个邻接点 w)
if(!visited[w])
{
visited[w] = true;
Enqueue(W,Q);
count++;
tail = w;
}
if(V==last)
{
level++;
last=tail;
}
if(level == 6)
break;
}
return count;
}