は、あなたが以下のように木の直径を計算し、ツリーの任意のノードn
ため、findDiameter(n, null)
として、それを呼び出すことができます直径/2です。あなたがする必要があるのは、隣人を超えるループである
public findDiameter(node n, node from) returns <depth, diameter>
// apply recursively on all children
foreach child in (neighbors(n) minus from) do
<de, di> = findDiameter(child, n)
// depth of this node is 1 more than max depth of children
depth = 1 + max(de)
// max diameter either uses this node, then it is 1 + the 2 largest depths
// or it does not use this node, then it's the max depth of the neighbors
diameter = max(max(di), 1 + max(de) + oneButLargest(de))
は最大直径と2つの最大深さを追跡します。
あなたは無向グラフの[グラフ中心](http://en.wikipedia.org/wiki/Graph_center)を探していますか? –
@PeterdeRivazそうですね。 –