深度优先搜索

来源:互联网 发布:java cs架构开发书本 编辑:程序博客网 时间:2024/06/08 04:47

这里写图片描述
邻接表:
0 1 2 5 6
1 0
2 0
3 4 5
4 3 5 6
5 0 3 4
6 0 4

深度优先遍历:
0 -> 1 1没有其他邻接点,退回到0,遍历0的下一个邻接点2
0 ->1 ->2 2没有其他邻接点,退回到0,遍历0的下一个邻接点5
0 ->1 ->2 ->5 遍历5的邻接点,0遍历过了,遍历邻接点3
0 ->1 ->2 ->5 ->3 遍历3的邻接点4
0 ->1 ->2 ->5 ->3->4 遍历4的邻接点6,因为4的邻接点3,5已被遍历
0 ->1 ->2 ->5 ->3 ->4 ->6 6没有邻接点,退回到4,4的邻接点都被遍历,退回到3,3的邻接点都被遍历,退回到5,5的邻接点退回到2,2退回到1,1退回到0,结束

public class DepthFirstSearch {    private boolean[] marked;    private int count;//连通分量的个数    public DepthFirstSearch(Graphics G,int s){        marked = new boolean[G.v()];        dfs(G,s);    }    private void dfs(Graphics G, int v) {        marked[v] = true;//标记遍历过的顶点        for(int w:G.adj(v)){            if(!marked[w]){                dfs(G,w);                count ++;//求连通分量的个数            }        }    }    public boolean marked(int w){        return marked[w];       }    public int count(){        return count;    }}

应用:深度优先搜索的一个应用是求连通分量的个数