首页 > 其他 > 详细

深度优先搜索

时间:2018-05-14 20:42:05      阅读:238      评论:0      收藏:0      [点我收藏+]

 深度优先搜索用于寻找图(G)中与顶点s连通的其它顶点。

 

设计一个类实现该算法,类的API如下:

技术分享图片

 

 

算法实现

用递归的方法来遍历所有的顶点,在访问一个顶点时:

将它标记为已访问;

递归的访问它的没有被标记的邻接点。

 

实现代码如下:

public class DepthFirstSearch {

    private boolean[] marked;
    private int count;

    /**
     * Find the vertices connected to vertex s
     */
    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[w])
                dfs(G, w);
    }

    /**
     * Is vertex v connected to s
     */
    public boolean marked(int v) {
        return marked[v];
    }

    /**
     * Return the count of vertices connected to s
     */
    public int count() {
        return count;
    }

}

 

 

测试下图,与顶点0连通的顶点

技术分享图片

    public static void main(String[] args) {

        Graph G = new Graph(13);
        G.addEdge(0, 1);
        G.addEdge(0, 2);
        G.addEdge(0, 5);
        G.addEdge(0, 6);
        G.addEdge(3, 4);
        G.addEdge(3, 5);
        G.addEdge(4, 5);
        G.addEdge(4, 6);

        G.addEdge(7, 8);

        G.addEdge(9, 10);
        G.addEdge(9, 11);
        G.addEdge(9, 12);
        G.addEdge(11, 12);


        DepthFirstSearch search = new DepthFirstSearch(G, 0);
        for (int i=0; i<G.V(); i++)
            if (search.marked(i))
                System.out.print(i + " ");
    }

输出结果:0 1 2 3 4 5 6 

 

深度优先搜索

原文:https://www.cnblogs.com/deltadeblog/p/9037955.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!