树的直径

任意点开始搜索,找到当前点能到达最远的点,再对这个点进行一次搜索,得到的即为树的直径

void bfs(int s)
{
    queueq;
    memset ( vis, 0, sizeof(vis) );
    qu.push(s);
    dist[s] = 0;
    vis[s] = 1;
    maxs = 0;
    while ( !qu.empty() )
    {
        int u = q.front();
        q.pop();
        for (int i = head[u]; ~i; i = edge[i].next)
        {
            int v = edge[i].to;
            if (!vis[v])
            {
                vis[v] = 1;
                dist[v] = dist[u] + 1;
                qu.push(v);
                if (maxs < dist[v]) //更新
                {
                    maxs = dist[v];
                    end_p = v;
                }
            }
        }
    }
}

bfs(1);
bfs(end_p);


你可能感兴趣的:(算法)