You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无向图中满足2边距离条件的孤立边查找算法设计

无向图中孤立边的查找算法设计

嘿,先把问题的核心定义掰扯清楚:咱们要找的孤立边,是指和图里其他所有边的最短距离至少为2的边。这里的“边距离”可以这么理解:如果两条边共享同一个节点,那它们的距离就是0(直接相邻);如果两条边通过一个节点间接连起来(比如边e₁的端点u连了w,w又连了边e₂的端点x),那距离就是1;只有当两条边之间得绕至少两个节点才能连上时,距离才够2,这样的边才是我们要找的孤立边。

基于这个定义,咱们可以把判定规则转化成好实现的条件:

一条边 e=(u,v) 是孤立边,当且仅当:

  1. u和v除了彼此之外,其他邻居要么没有,要么都是“孤家寡人”——也就是这些邻居只连了u或v,没连其他任何边;
  2. 不存在其他边,和这条边通过一个节点间接相连(说白了就是,u和v的邻居里,没有哪个节点是另一条边的端点)。

接下来是具体的实现步骤,分阶段来,清晰明了:

第一步:先把图的基础数据理清楚

  • 先遍历所有节点,给每个节点记好度数(也就是它连了几条边),同时记录每个节点关联的所有边,方便后续查找。
  • 把所有边都存到一个集合里,后续要比对的时候直接用。

第二步:先筛掉明显不符合的边,缩小范围

先快速排除那些肯定不是孤立边的情况:

  • 如果一条边的某个端点度数≥3,直接pass:这个端点连了至少两条其他边,当前边和这些边共享节点,距离为0,完全不满足要求。
  • 如果某个端点度数是2,那得看看它的另一个邻居:要是这个邻居还连了其他边(也就是邻居度数≥2),那当前边和那条边的距离是1,不符合条件,直接排除。

这一步筛完后,剩下的候选边要么两个端点都是叶子节点(度数1),要么端点是度数2但另一个邻居是叶子节点。

第三步:给候选边做最终验证

对于第二步剩下的候选边 e=(u,v),咱们再仔细核对:

  • 把u除了v之外的邻居都列出来,记成N(u);同理列出v除了u之外的邻居N(v)。
  • 检查N(u)里的每个节点:确保它们的度数都是1(也就是只连了u,没其他边)。
  • 同样检查N(v)里的每个节点,确保它们的度数也都是1。
  • 这一步其实已经能覆盖所有情况了——因为如果邻居度数是1,那它不可能连其他边,自然不会和其他边产生距离小于2的情况。

要是以上条件都满足,那这条边就是咱们要找的孤立边。

小优化:针对大图的提速技巧

如果图的节点和边特别多,可以试试这些优化:

  • 先提前标记好所有孤立节点(度数0)和叶子节点(度数1),后续直接用标记好的结果,不用重复计算。
  • 如果一条边的两个端点都是叶子节点,那它肯定是孤立边——因为俩端点都没其他邻居,根本没法和其他边扯上关系。
  • 如果一个端点是叶子,另一个端点度数是2,那只要检查这个度数2的端点的另一个邻居是不是叶子:是就留,不是就排除。

举个例子好理解

比如有这么个图:

  • 边e₁=(A,B),A和B的度数都是1;
  • 边e₂=(C,D),C连了D和E,E的度数是1;
  • 边e₃=(E,F),F度数是1。

那e₁是孤立边:它和e₂、e₃之间没有任何短路径连接,满足距离≥2的要求。
e₂不是孤立边:因为C连了E,而E又连了e₃的端点F,所以e₂和e₃的距离是1,不符合条件。


内容的提问来源于stack exchange,提问作者janvr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:54:17