有向圖中求兩點(diǎn)之間所有路徑(JAVA實(shí)現(xiàn))

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

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

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

圖的鄰接矩陣

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

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

public class AllRoads {
    // 定義一個(gè)圖
    static int[][] Graph = {
            {0,1,1,0},
            {0,0,0,0},
            {0,1,0,1},
            {0,1,0,0}
    };
    // 頂點(diǎn)個(gè)數(shù)
    static int G_length = 4;
    // visit數(shù)組,用于在dfs中記錄訪問(wèn)過(guò)的頂點(diǎn)信息。
    static int[] visit = new int[G_length];
    //存儲(chǔ)每條可能的路徑
    static ArrayList<Character> path = new ArrayList<>();
    // 用于存儲(chǔ)所有路徑的集合
    static ArrayList<String> ans = new ArrayList<>();
    //起點(diǎn)和終點(diǎn)
    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.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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