zoukankan      html  css  js  c++  java
  • 算法7-4:宽度优先搜索

    宽度优先搜索的基本思想就是先将源点加入到一个队列中。 每次从队列中取出一个顶点。将该顶点的邻居顶点中没有拜訪过的顶点都加入到队列中。最后直到队列消耗完成为止。


    应用


    宽度优先搜索能够解决最短路径问题。

    而最短路径算法在互联网中应用很广泛,尤其是路由这块。

    由于路由追求的是高效,所以每一个路由路径都是通过最短路径计算出来的。假设没有最短路径算法,我们可能就享受不到这么快的网速了。


    另外。宽度优先搜索在快递行业也会用到。用于计算最短路径。


    代码


    import java.util.Stack;
     
    /**
     * Created by caipeichao on 14-6-10.
     */
    public class BFS {
        private int s;
        private boolean[] visited;
        private int[] edgeTo;
     
        public BFS(Graph G, int s) {
            this.s = s;
            visited = new boolean[G.V()]; // 注意,这句话不要忘记了
            edgeTo = new int[G.V()]; // 注意:这句话不要忘记了
            bfs(G);
        }
     
        public void bfs(Graph G) {
            LinkedQueue<Integer> q = new LinkedQueue<Integer>();
            q.enqueue(s);
            while (!q.isEmpty()) {
                int v = q.dequeue();
                for (int w : G.adj(v)) {
                    if (!visited[w]) {
                        visited[w] = true; // 注意:这句话不要忘记了
                        edgeTo[w] = v;
                        q.enqueue(w);
                    }
                }
            }
        }
     
        public boolean hasPathTo(int v) {
            return visited[v];
        }
     
        public Iterable<Integer> pathTo(int v) {
            if (!hasPathTo(v)) return null; // 注意,这句话不要忘记了
            Stack<Integer> result = new Stack<Integer>();
            while (v != s) {
                result.add(v);
                v = edgeTo[v];
            }
            return result;
        }
    }


  • 相关阅读:
    spring入门(八) spring mvc设置默认首页
    spring入门(七) spring mvc+mybatis+generator
    spring入门(六) spring mvc+mybatis
    spring入门(五) spring mvc+hibernate
    spring入门(四) spring mvc返回json结果
    spring入门(三) 使用spring mvc
    spring入门(二) 使用注解代替xml配置
    spring入门(一) 根据xml实例化一个对象
    idea常用技巧
    oracle系列(四)PL/SQL
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5318745.html
Copyright © 2011-2022 走看看