社区
数据结构与算法
帖子详情
有向树的直径
darkstar21cn
2002-11-13 04:03:11
有向树(就是没有环路的有向连通图)的直径是最大两个节点间距(用边的数目表示)。要求C++算法。
高分赠送!!!(另有送分)
...全文
207
15
打赏
收藏
有向树的直径
有向树(就是没有环路的有向连通图)的直径是最大两个节点间距(用边的数目表示)。要求C++算法。 高分赠送!!!(另有送分)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Riemann
2002-12-12
打赏
举报
回复
zzwu(未名)仅是举例说明“P离Q最远,但Q离P可以不是最远”。
darkstar21cn
2002-12-04
打赏
举报
回复
但是如果是:
e
.
f
.
a...b...c...d
e到d最远,d到e也是最远.
zzwu
2002-11-29
打赏
举报
回复
这一算法大概在十年前的<科学>杂志(美国)上曾登载过.我就利用它来为蛋白质寻找主链的.但必须是无向图.
zzwu
2002-11-29
打赏
举报
回复
看看例子就清楚了:
p
|
a ---b---c----d---e----q
|
f
上图中, q离开p最远,但离开q最远的不是p,而是a
darkstar21cn
2002-11-29
打赏
举报
回复
to zzwu(未名):
能否说清楚点?——难道P离Q最远,Q离P不是最远吗?
谁能解出来,高分相送!!!!!——解出者零给300分!!!!!
zzwu
2002-11-25
打赏
举报
回复
如果为有向图,则可从所有源点(入度为0的点)出发,搜索一次就行了.
zzwu
2002-11-25
打赏
举报
回复
如果没有回路,这一问题很容易解:
1.从树上任意点P出发,寻找与P距离最远的点Q,
2.再从Q出发,寻找与Q距离最远的点T,
则Q-T的距离就是此树的直径.
这一工作我以前在为蛋白质寻找主链时曾用到,参见www.zzwu.net
TAlucard
2002-11-25
打赏
举报
回复
我倒觉得这是个动态规划问题
darkstar21cn
2002-11-22
打赏
举报
回复
对不起,题目要求的不是二叉树而是一般的树。
另外:
还有一种算法就是,每一轮删除出度为0的节点,并删除掉与之有关系的边。在进行下一轮,所需的轮数乘2就是树的直径。
mmmcd
2002-11-22
打赏
举报
回复
1.任取意顶点开始,深度优先搜索找到距它最远点。
2.从最远点出发,重复深度优先搜索,找到距它最远的点,这时找到的间距就是整个图中最大的。
darkstar21cn
2002-11-20
打赏
举报
回复
是不是问题太难了?没有人能回答?
算了,我给出几种算法:
1、使用Floyd算法,把最短路径存放在一个数组中,然后找到最大的一个就是树的直径,时间复杂度O(n)(n为总的节点数)。
2、使用广度有限搜索(BFS),每个节点都要进行,每次都能得到一个最大距离。所有节点里最大的就是树的直径。时间复杂度,BFS的时间复杂度为O(n(n+e))(e为总的边数)。
3、创建一棵树,每一个节点都比正常的多两个域用于分别记录器左右子树的高度,然后在求树的直径。
注:前两种是书上的答案,但我觉得不太好,今天突然想到第三种方法,故写来,与大家分享,也希望如果谁愿意有条件,帮我验证一下。
算法实现如下:
struct Tree {
Char Data; //在这里它没什么用处
struct Tree *Lchild,*Rchild;
int Lhigh,Rhigh;
};
void Adjust(Tree *T)
{
if (T->Lchild!=NULL) {
Adjust(T->Lchild);
T->Lhigh=(T->Lchild->Lhigh>T->Lchild->Rhigh?
T->Lchild->Lhigh:T->Lchild->Rhigh)+1;
}
else T->Lhigh=0;
if (T->Rchild!=NULL) {
Adjust(T->Rchild);
T->Rhigh=(T->Rchild->Lhigh>T->Rchild->Rhigh?
T->Rchild->Lhigh:T->Rchild->Rhigh)+1;
}
else T->Rhigh=0;
}
int DiaofTree(Tree *T,int& Dia=0)
{
if (Dia<T->Lhigh+T->Rhigh+1) Dia=T->Lhigh+t->Rhigh+1;
if (T->Lhigh*2>Dia) DiaofTree(T->Lchild,Dia);
if (T->Rhigh*2>Dia) DiaofTree(T->Rchild,Dia);
}
darkstar21cn
2002-11-19
打赏
举报
回复
up!`
darkstar21cn
2002-11-19
打赏
举报
回复
有向树实际上就是一个树——不带回路的图。要求自己定义存储结构。
zzwu
2002-11-13
打赏
举报
回复
带回路吗?
sameboat
2002-11-13
打赏
举报
回复
是二叉树吗?还是普通有向树?
我还没有仔细考虑,
(1)但我觉得要用到树的遍历;
(2)直径的一端定是叶结点,另一端可能是叶结点也可能不是。
另外,我觉得这很象一个作业,你还是独立完成吧,呵呵,别人只能给你一些建议供参考。
短径
有向树
的优美性
由于在某些H分解问题中都可以使用优美图,因此在无向图上研究了优美标记。 在本说明中,我们研究了
直径
短的无向树在许多方向上的有向优美问题,并提供了一些
有向树
否认任何丑陋标签。
树的
直径
问题
22.2-8 我们将一棵树T = (V, E)的
直径
定义为maxδ(u, v)(u,v ∈ V), 也就是说,树中所有最短路径距离的最大值即为 树的
直径
。请给出一个有效算法来计算树的
直径
,并分析算法的运行时间。 Answer: 将BFS算法稍作改变...
poj 1383 树的
直径
两种求树
直径
的方法
设maxd[u], secd[u]分别为点u离叶节点最长、次长距离(不经过相同儿子),(距离指的是边数,下同),maxl[u]为以u为树根的树上
直径
长度,则有 maxl[u] = max{maxl[son], maxd[u]+secd[u]}, 其中 all son ∈ u,即...
三 网络数据分析(1)R语言简单操作
is.connected(dg2, mode="strong") clusters(dg2, mode="strong") #默认mode为weak 图的
直径
图中(两节点最短路径的)最长距离的值称为图的
直径
plot(g) diameter(g, weights=NA) plot(dg) diameter(dg, weights=NA...
DP_树形 DP_数字转换
上述模型成立是因为每个数字的约数和(不包括自己,下同)是一个定值,我们正好根据大小关系建立
有向树
来进行dfs,根据 树的
直径
求法 ,就可以得到结果了。 代码: # include # include # include ...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章