首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求解一个比较难的有关问题!(100分)

2012-02-21 
求解一个比较难的问题!!!(100分)从根到叶子的最大距离称为树的半径(radius)。给定一个无向连通图,写一个算

求解一个比较难的问题!!!(100分)
从根到叶子的最大距离称为树的半径(radius)。给定一个无向连通图,写一个算   法以找出半径最小的生成树。

[解决办法]
看看数据结构,有关二叉树方面的知道吧,上面有用C写的
[解决办法]
参考Prim算法,为没条边给一个权值1,变成一个网。
修改一下Prim算法中关于寻找最小代价边的部分。原来是找一个最小代价边,使得到已有集合代价最小,现在改成距离生成树根节点的代价最小。
动态规划应该可以解决这个问题:
定义一个最小生成树集合S,最初空集
定义R[i] 记录每个节点的最小半径(到生成树根的距离)
dist[i,k]是i到k的距离

递归定义
R[K] = Min(R[i] + dist[i,k]) 对于每个S中的i


[解决办法]
dist[i,k]准确说是记录i,k是否直接连通,参考邻接矩阵表示
[解决办法]
如果楼主的意思是找一个有根树,可以这样做:
枚举每个节点做根,然后广搜,层数就是半径,找最少的一个。

如果是找一个无根树,那么树的半径明显是某两个叶子之间的距离
这样枚举每个节点,接着枚举和它相邻的边,删掉剩下的边,这样就成了叶子,然后广搜,层数就是半径,找最少的一个。

热点排行