图
搜索
伪代码实现
实现
不撞南墙不回头,改为优先遍历层次更深的状态, (与头结点最短经过几条边可以连通就视为是第几层)
直到遇到一个节点,其不再拥有子树,则返回上一层,访问其未被访问过的子树,
直到解答树中所有的状态都被遍历完毕。
已经遍历过的不再遍历,我们用set来实现这个功能
//图的遍历只需要从某个节点开始,这个节点仅需要它自身的value和它的邻接节点即可
import java.util.ArrayList;
//值,入度出度,点集边集
public class Node {
public int value;
public ArrayList<Node> nexts;
public Node(int value) {
nexts = new ArrayList<>();
}
}
import java.util.HashSet;
import java.util.Stack;
public class DFS {
public static void dfs(Node node) {
if (node == null) {
return;
}
Stack<Node> stack = new Stack<>();
HashSet<Node> set = new HashSet<>();
stack.add(node);
set.add(node);
System.out.println(node.value);
while (!stack.isEmpty()) {
Node cur = stack.pop();
for (Node next : cur.nexts) {
if (!set.contains(next)) {
stack.push(cur);
stack.push(next);
set.add(next);
System.out.println(next.value);
break;
}
}
}
}
}