Java中的BFS和DFS

2018-08-29  本文已影响18人  雇个城管打天下
import java.util.*;

class Main {
    public static void main(String[] args) {
        HashMap<String, String[]> map = new HashMap<>();
        map.put("A", new String[] { "B", "C" });
        map.put("B", new String[] { "A", "C", "D" });
        map.put("C", new String[] { "A", "B", "D", "E" });
        map.put("D", new String[] { "B", "C", "E", "F" });
        map.put("E", new String[] { "C", "D" });
        map.put("F", new String[] { "D" });

        BFS(map, "E");
        System.out.println();
        DFS(map, "A");
    }

    //map表示所有的点和其邻接点的关系,s表示我们要开始进行的节点
    //广度优先搜索使用队列这个数据结构
    static void BFS(HashMap map, String s) {
        Queue<String> queue = new LinkedList<>();
        queue.offer(s);
        List<String> seen = new ArrayList<>();
        seen.add(s);
        while (queue.size() > 0) {
            String vertex = queue.poll();
            String[] nodes = (String[])map.get(vertex);
            for (String w : nodes) {
                if (!seen.contains(w)) {
                    queue.offer(w);
                    seen.add(w);
                }
            }
            System.out.print(vertex+" ");
        }
    }

    //map表示所有的点和其邻接点的关系,s表示我们要开始进行的节点
    //深度优先搜索使用栈这个数据结构
    static void DFS(HashMap map,String s){
        Stack<String> stack = new Stack<>();
        stack.push(s);
        List<String> seen = new ArrayList<>();
        seen.add(s);
        while (stack.size() > 0) {
            String vertex = stack.pop();
            String[] nodes = (String[])map.get(vertex);
            for (String w : nodes) {
                if (!seen.contains(w)) {
                    stack.push(w);
                    seen.add(w);
                }
            }
            System.out.print(vertex+" ");
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读