我有
的散列图Tables => Set of Parent Tables [ HashMap<String, HashSet<String>> ]
非循环案例可以是:
A -> [B,C]
D -> [B,C]
B -> [C]
c -> []
循环案例的例子是:
A -> [B,C]
B -> [C]
C -> [A]
我想拒绝循环案例,因此需要一个能够检测提供的hashmap是否有任何循环的函数:
public boolean hasDependencies ( HashMap<String, HashSet<String>> objectAndItsDependentsMap )
{
//Implementation
}
我已阅读帖子,建议用于检测周期的算法,但作为java的新手不能使用该知识来构成上述功能。请帮忙!
答案 0 :(得分:1)
我建议您阅读并实施Tarjan的算法。
前段时间我用过它。这非常有效。
另见:
答案 1 :(得分:-1)
这是一个仅基于您的示例的粗略实现。我建议对其他例子进行测试。
public boolean hasDependencies(Map<String, Set<String>> objectAndItsDependentsMap) {
for (String node : objectAndItsDependentsMap.keySet()) {
final Set<String> directNeighbors = objectAndItsDependentsMap.get(node);
for (String directNeighbor : directNeighbors) {
Set<String> next = objectAndItsDependentsMap.get(directNeighbor);
while (next != null) {
for (String n : next) {
next = objectAndItsDependentsMap.get(n);
if (next != null && (next.contains(n) || next.contains(node))) {
return true;
}
}
}
}
}
return false;
}