无向图的深度优先搜索简单易懂,通过栈实现,需要一个图,图的实现请看上篇,使用一个数组来标记图中的节点是否被遍历过,从顶点开始遍历,每次找到与节点相连的节点遍历。具体实现如下:
API
DepthFirstSearch(Graph G, int s) 找到和起点s连通的所有顶点
boolean marked(int v) v和s是连通的吗
int count() 与s连通的顶点总数
public class DepthFirstSearch{
private boolean[] marked;
private int count;
public DepthFirstSearch(Graph G,int s){
marked = new boolean[G.V()];
dfs(G,s);
}
private void dfs(Graph G, int v){
marked[v] = true;
count++;
for(int w:G.adj(v)){
if(!marked[v]){
bfs(G,w);
}
}
}
public boolean marked(int w){
return marked[w];
}
public int count(){
return count;
}
}