使用python编写广度优先搜索求到各个顶点的最短路径

使用python编写广度优先搜索求到各个顶点的最短路径_第1张图片
1.png
# 使用广度优先搜索寻找输入节点到各个节点的最短路径,也就是跳数,基于无权图,第一次学这个,大部分代码都是借鉴的老师的。。不过基本理解了
import queue as que


if __name__ == '__main__':

    # 顶点之间的关系,
    list_data = [
        # 0  1  2  3  4
        [0, 1, 0, 1, 0],    # 0
        [0, 0, 1, 0, 0],    # 1
        [1, 0, 0, 1, 1],    # 2
        [0, 0, 0, 0, 1],    # 3
        [0, 1, 0, 0, 0],    # 4
    ]

    list_len = len(list_data)

    # 运行时队列
    q = que.Queue(list_len)

    max_setup = list_len
    start = 0   # 开始的顶点位置
    q.put(start)    # 初始顶点加入队列
    min_setup = [max_setup]*max_setup   # 到各个点最短的步数组成的数组

    # 先将当前走的节点设置步数为0
    min_setup[start] = 0

    # 队列不空就一直跑
    while q.empty() is False:

        currentNode = q.get()   # 获取到当前节点

        for i in range(5):

            # currentNode!= i表示找的是线,
            # list_data[currentNode][i] == 1表示线可以走
            # min_setup[i] == max_setup 表示该节点没走过
            if currentNode != i and list_data[currentNode][i] == 1 and min_setup[i] == max_setup:
                q.put(i)
                min_setup[i] = min_setup[currentNode]+1

    print(min_setup)    # 打印结果

你可能感兴趣的:(使用python编写广度优先搜索求到各个顶点的最短路径)