六度空间
算法思路
- 对节点进行广度优先搜索
- 搜索过程中累计访问的节点数
- 需要记录“层数”,仅计算6层以内的节点数
void SDS()
{
for( each V in G ){
count = BFS(V);
Output(count/N);
}
}
int BFS()
{
visited[V] = true; count = 1;
level = 0; last = V;
Enqueue(V, Q);
while( !IsEmpty(Q) ){
V = Dequeue(Q);
for( V的每个邻接点 W )
if( !visited[W]){
visited[W] = true;
Enqueue(W);
tail = W;
}
if( V == last ) {
level++; last = tail;
}
if( level == 6 ) break;
}
return count;
}
用什么方法存储图比较好?
- 在六度空间问题中,题目假设边的条数不超过节点数的33倍。用什么方法存储图比较好?为什么?
- 邻接表存储空间为N+2E,当E≤33N时,N+2E≤67N。即当N≤67时,邻接表存储比邻接矩阵少占空间,故邻接表法。