DFS: 深度优先查找。
模板1:
DFS通过递归深度查找。
boolean dfs(Node cur, Node target, Set<Node> visited) {
if(cur == target){
return ture;
}
for(Node next : cur’s neighbors ) {
visited.add(next);
return dfs(next, target, visisted);
}
}
模板2:
模板1的实现简单,但是存在一个缺点,如果递归深度太深,会出现栈溢出。可以使用显示栈实现DFS。
boolean dfs(Node root, Node target) {
ArrayDeque<Node> stack = new ArrayDeque<>();
Set<Node> visisted;
stack.add(root);
while(!stack.isEmpty()) {
Node cur = stack.pop();
If(cur == target) {
return true;
}
for(Node next : cur’s neighbors){
If(!visited.contains(next) {
stack.add(next);
visisted.add(next);
}
}
}
}
原文:https://www.cnblogs.com/billyqiu/p/14200717.html