我最近发现了图形和算法,并试图解决涉及两种不同类型顶点的特定问题:用户和实体。详情如下:
虽然图表有两种类型的顶点,但它不是二分的。
到目前为止,我已经设法创建了一个图形对象,该对象包含一个顶点索引的邻接列表数组。邻接列表基于链表。
我认为我需要对All Paths算法进行某种变化,但我不太确定。另外,不确定我是否应该关注DFS或BFS。
我在PHP中工作,这使问题变得复杂,因为大多数示例都是Java。我真正喜欢的是伪代码。
有什么想法吗?谢谢!
答案 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;