[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; } }} |
浙公网安备 33010602011771号