6.4应用实例:六度空间

六度空间

  • 你和任何一个陌生人之间所间隔的人不会超过六个

算法思路

  • 对节点进行广度优先搜索
  • 搜索过程中累计访问的节点数
  • 需要记录“层数”,仅计算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时,邻接表存储比邻接矩阵少占空间,故邻接表法。

你可能感兴趣的:(数据结构笔记,算法)