zoukankan      html  css  js  c++  java
  • 【算法日记】广度优先算法

    广度优先算法是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。广度优先搜索让你能够找出两样东西之间最短的距离。在学习这个算法之前我们要了解图的概念

    1.什么是图

    如上图所示。图是有节点和边组成的。一个节点可能和很多节点直接相连,这些相邻的节点就被称作邻居

    2.广度优先搜索

    常常我们有这样一个问题,从一个起点开始要到一个终点,我们要找寻一条最短的路径

    广度优先搜索可解决两个问题

    从A到E有路径么?

    从A到E的路径有那些?

    A->B->E

    A->D->E

    A->C->D->E

    假设每个节点间的距离是相等的。那么A到E的最短距离就是

    A->B->E

    A->D->E

    广度优先搜索是这样做的。搜索范围从起点开始向外延伸。先检查一度关系,在检查二度关系,以此类推。直到遍历所有节点

    3.算法实现

    用字典保存图信息

    route={
            "A":["B","C","D"],    # 起点
            "B":["E"],
            "C":["D"],
            "D":["E"],
            "E":[]    # 终点
        }
    def searchRoute():
        """
        路线算法
        """
        route={
            "A":["B","C","D"],    # 起点
            "B":["E"],
            "C":["D","F"],
            "D":["B","H"],
            "E":["H"],
            "F":["G"],
            "G":["H"],
            "H":[]    # 终点
        }
    
        path=[]
    
        start="A"
        end="H"
    
        def search(string):
            print string
            point=string[-1]
            print point
            print route[point]
            # # 如果有邻居存在
            if route[point]:
                for each in route[point]:
                    if each==end:
                        path.append(string+each)
                        break
                    else:
                        newPath=string+each
                        search(newPath)
        if route[start]:
            for item in route[start]:
                new=start+item
                search(new)
    
        print path

    最后出来的结果是数组包含A到E的所有路径

    ps:图分有向图和无向图两种,节点之间关系是单向的是有向图。直接用直线的是五向图。有兴趣的可以多了解下。上面的例子用的是有向图

  • 相关阅读:
    函数
    A × B problem
    求n的阶乘
    自己构建一个vector函数
    int与string的互相转化
    列一列(斐波那契数列)
    找一找
    c++大数计算模板
    JSON--js中 json字符串转对象、对象转字符串
    JSON
  • 原文地址:https://www.cnblogs.com/zimuzimu/p/7158069.html
Copyright © 2011-2022 走看看