[2016-01-27][树的直径]

[2016-01-27][树的直径]

随机取一个顶点,跑一次dfs ,得到当前点能走到的最远的顶点 ,k
再从k 跑一遍dfs ,得到的最远的顶点q
k和q之间的距离,就是树的直径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void dfs(int cur, int ct)
{
    int k = 0;
    int size = v[cur].size();
    int tmp;
    for(int i = 0;i <  size;i++)
    {
        tmp = v[cur][i];
        if(  !vis[tmp])
        {
            vis[tmp] = 1;
            dfs(tmp,ct + 1);
            k++;
        }
    }
    if(k == 0)
    {
        if(diameter < ct)
        {
            diameter = ct;
            p = cur;
        }
      
    }
}


来自为知笔记(Wiz)


posted on 2016-01-27 23:35  红洋  阅读(111)  评论(0)    收藏  举报

导航