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;
        }
    }


  • 相关阅读:
    Symfony2 学习笔记之报错
    Symfony2学习笔记之数据校验
    Symfony2学习笔记之HTTP Cache
    Symfony2学习笔记之表单
    Symfony2 学习笔记之插件格式
    Symfony2学习笔记之数据库操作
    Symfony2 学习笔记之内部构件
    Symfony2 学习笔记之模板使用
    让VIEWSTATE从页面中完全消失(小技巧)
    打包bat等文件成exe,双击运行不显示dos窗口,exe不报毒
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5318745.html
Copyright © 2011-2022 走看看