publicstaticvoiddfs(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.nexts); 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; } } } }
图的广度优先BFS
利用队列实现
从源节点开始依次按照宽度进队列,然后弹出
每弹出一个点,把该节点所有没有进过队列的邻接点放入队列
直到队列变空
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
publicstaticvoidbfs(Node node){ if (node == null){ return; } Queue<Node> queue = new LinkedList<>(); HashSet<Node> set = new HashSet<>(); queue.add(node); set.add(node); while (!queue.isEmpty()){ Node cur = queue.poll(); System.out.println(cur.value); for (Node next : cur.nexts){ if (!set.contains(next)){ set.add(next); queue.add(next); } } } }