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

时间:2012-12-06 00:44:06

标签: algorithm graph-algorithm

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

  • 图表已定向
  • 我想找到从A到B的所有路径
  • A始终是用户
  • B可以是用户或实体
  • 如果B是用户,则搜索的最大深度为3边
  • 如果B是实体,则最大深度为2条边
  • 除非用户是A
  • ,否则我无法遍历从用户出站的任何边缘

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

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

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

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

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

听起来你正在遍历某种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;