public void explore(int v) {
visited[v]=true; //结点v已经被遍历了
for(int i=0;i<verticesnumber;i++) {
if(arcs[v][i]==1 && (visited[i]==false)) { //如果下一个结点和上一个结点有连接的话(连接为1,不连接为0),那么arcs[v][i]==1,并且这个结点还未遍历的话,就再进行一次遍历,这里指的是一条树走下来,只遍历了一条,只是图中的冰山一角
explore(i);
}
}
}
public void dfs() { //这里就是dfs的方法,不过是要根据上面的explore来做的,毕竟要从小到大
for(int i=0;i< verticesnumber;i++) {
visited[i]=false; //遍历一圈,先进行初始化,都是未遍历的状态,也可以删掉
}
for(int j=0;j< verticesnumber;j++) {
if(visited[j]==false) { //遍历所有的顶点,如果结点处于未遍历的状态,那就按章explore的方法来进行遍历
explore(j);
}
}
}
这里的verticesnumber都是图Graph中的结点个数,因为要遍历的是整个图的结点
if(visited[j]==false) 和 visited[i]=false; 有本质上的区别,需要进行特别的注意
以上不过只是方法,并不是完整的dfs实现代码,还需要加入一整个图Graph,结点信息,结点数量,边的信息,以及boolean对visited的判断
这是dfs的递归实现方法
还有dfs的栈实现方法