1. 程式人生 > >簡單DFS遞迴法

簡單DFS遞迴法

/**
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;
				}
			}
		}

	}

}