1. 程式人生 > >求樹的直徑

求樹的直徑

一次 color div class != ret code 長度 bsp

兩遍bfs即可

分析:一開始任取一個點u進行搜索查找出距離點u最遠距離的點v和長度

第二次dfs則從第一次中的v找出距離點v最遠距離的點的路徑長度

void bfs(int u)
{
    queue<int> Q;
    mem(d, 0);
    mem(vis, 0);
    Q.push(u);
    d[u] = 0;
    vis[u] = 1;
    maxway = 0, pos = u;
    while(!Q.empty())
    {
        u = Q.front(); Q.pop();
        for(int i=head[u]; i != -1
; i=Edge2[i].next) { int v = Edge2[i].v; if(vis[v]) continue; vis[v] = 1; d[v] = d[u] + 1; if(d[v] > maxway) maxway = d[v], pos = v; Q.push(v); } } } int main() { bfs(1); bfs(pos);
return 0; }

求樹的直徑