繁体   English   中英

查找此有向图中的所有路径

[英]Finding All Paths in this Directed Graph

我最近发现了图形和算法,并试图解决涉及两种不同类型的顶点的特定问题:用户和实体。 详情如下:

  • 该图是针对性的
  • 我试图找到从A到B的所有路径
  • A始终是用户
  • B可以是用户或实体
  • 如果B是用户,则搜索的最大深度为3个边
  • 如果B是实体,则最大深度为2个边
  • 除非用户是A,否则我无法遍历从用户出站的任何边

虽然图形有两种类型的顶点,但它不是二分的。

到目前为止,我已经设法创建了一个图形对象,它包含一个顶点索引的邻接列表数组。 邻接列表基于链表。

我想我需要对All Paths算法进行某种变化,但我不太确定。 另外,不确定我是否应该关注DFS或BFS。

我正在使用PHP,这使问题复杂化,因为大多数示例都是Java。 我真正喜欢的是伪代码。

有任何想法吗? 谢谢!

听起来你正在遍历某种LDAP实现。 如果您需要通用算法,只需使用DFS,因为它更容易编码。 除非深度会发生变化,否则这样做有点过分。

最通用的方式

 dfs(A,B):
     return dfs(A,B,1);

 dfs_(u,B,depth):
     if u == B:
          return u;

     if (u is User and depth > 3) or (u is Group and depth > 2):
          return None;       

     out = [];
     for children of thing:
          return max( dfs_(children,depth+1) ) # take the non-null one
     out.append(u);
     return out;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM