深度優先搜索算法
深度優先的要點
在搜索一幅圖時,只需要用一個遞歸來遍歷所以頂點。在經過每個頂點的同時:
- 將它標記爲已訪問
- 遞歸訪問所有未標記的鄰居節點
深度搜索Java實現
public class DepthFirstSearch{
private boolen[] marked; // is there an s-v path ?
private int count; // number of vertices connected to s
public DepthFirstSearch(Graph G, int s){
marked = new boolen[G.V()];
dfs(G, s);
}
// depth first search from v
private void dfs(Graph G, int v){
count++;
marked[v] = true;
for (int w : G.adj(v)){
if (!marked[w]){
dfs(G, w);
}
}
}
public boolen marked(int v){
return marked[v];
}
public int count(){
return count;
}
}
深度優先搜索可處理問題
- 連通性。可以輕鬆回答s是否與v頂點相連,
DepthFirstSearch.marked
- 單點路徑。可以回答是否存在從s到目的頂點之間的有效路徑