有向圖中求兩點之間所有路徑(JAVA實現(xiàn)Dijkstra鄰接矩陣算法)

假設(shè)圖中有四個頂點,分別為A,B,C,D。圖中的路徑有一下幾條:

A->B, A->C, C->B, C->D, D->B

我們采用鄰接矩陣方式存儲路徑信息。如下所示


image

假設(shè)我們要找從A到B的所有路徑,采用DFS算法:

import java.util.ArrayList;
import java.util.List;

public class AllRoads {
    // 定義一個圖
    static int[][] Graph = {
            {0,1,1,0},
            {0,0,0,0},
            {0,1,0,1},
            {0,1,0,0}
    };
    // 頂點個數(shù)
    static int G_length = 4;
    // visit數(shù)組,用于在dfs中記錄訪問過的頂點信息。
    static int[] visit = new int[G_length];
    //存儲每條可能的路徑
    static ArrayList<Character> path = new ArrayList<>();
    // 用于存儲所有路徑的集合
    static ArrayList<String> ans = new ArrayList<>();
    //起點和終點
    static int start;
    static int end;


    static void dfs(int u){
        visit[u] = 1;
        path.add((char)((int)'A'+u));
        if(u == end){
            ans.add(path.toString());
        }else{
            for (int i = 0; i < G_length; i++) {
                if(visit[i]==0&&i!=u&&Graph[u][i]==1){
                    dfs(i);
                }
            }
        }
        path.remove(path.size()-1);
        visit[u] = 0;
    }

    public static void main(String[] args) {
        start = 0;
        end = 1;
        dfs(start);
        System.out.println(ans);
    }
}

輸出結(jié)果為:

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容