深度优先搜索算法
深度优先的要点
在搜索一幅图时,只需要用一个递归来遍历所以顶点。在经过每个顶点的同时:
- 将它标记为已访问
- 递归访问所有未标记的邻居节点
深度搜索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到目的顶点之间的有效路径