算法與數據結構(27)—— bfs的最短路徑

從一個點出發, 與這個點相連的點都入隊,類似於樹的層次遍歷就好了~

核心代碼:

public ShortestPath(Graph graph, int s) {
        G = graph;
        assert s >= 0 && s < G.V();

        visited = new boolean[G.V()];
        from = new int[G.V()];
        ord = new int[G.V()];
        for( int i = 0 ; i < G.V() ; i ++ ){
            visited[i] = false;
            from[i] = -1;
            ord[i] = -1;
        }
        this.s = s;


        // 無向圖最短路徑算法,從s開始做廣度優先遍歷整張圖
        Queue<Integer> q = new LinkedList<Integer>();

        q.add(s);
        visited[s] = true;
        ord[s] = 0;
        while(!q.isEmpty()){
            int v = q.poll();
            for(int i : G.adj(v)){
                if(!visited[i]){
                    q.add(i);
                    visited[i] = true;
                    from[i] = v;
                    ord[i] = ord[v] + 1;
                }
            }
        }
    }

其他的都一樣~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章