簡單DFS遞迴法
阿新 • • 發佈:2019-01-09
/** 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 假設初始狀態是圖中所有頂點都未被訪問,則深度優先搜尋方法的步驟是: 1)選取圖中某一頂點Vi為出發點,訪問並標記該頂點; 2)以Vi為當前頂點,依次搜尋Vi的每個鄰接點Vj,若Vj未被訪問過,則訪問和標記鄰接點Vj,若Vj已被訪問過,則搜尋Vi的下一個鄰接點; 3)以Vj為當前頂點,重複步驟2),直到圖中和Vi有路徑相通的頂點都被訪問為止; 4)若圖中尚有頂點未被訪問過(非連通的情況下),則可任取圖中的一個未被訪問的頂點作為出發點,重複上述過程,直至圖中所有頂點都被訪問。 */ package dfs; /** * @author hanhexin * */ public class DFS { /** * @param args */ static int[][] table = { { 0, 1, 0, 1, 0, 0 }, { 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 1, 1 }, { 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, 1 } }; static boolean[] visit = new boolean[6]; public static void main(String[] args) { dfs(); } public static void dfs() { for (int i = 0; i < visit.length; i++) { visit[i] = false; } for (int i = 0; i < visit.length; i++) { if (visit[i] == false) { dfs_visit(i); } } } public static void dfs_visit(int row) { if (visit[row] == false) { visit[row] = true; System.out.println(row); for (int i = 0; i < table.length; i++) { if (table[row][i] != 0) { dfs_visit(i); break; } } } } }