美文网首页
python使用广度优先搜索找最短路径之和

python使用广度优先搜索找最短路径之和

作者: dwq1666666 | 来源:发表于2019-12-27 11:46 被阅读0次
"""
修改我们在视频中学习的广度优先搜索算法,使用上一题构造的数据结构表示图,作为函数的一个输入。输出某个给定的顶点到其他的所有顶点最小距离的和。
"""
import queue as que

n = int(input())

graph = {}

for i in range(n):
    src, dst = input().split()
    src, dst = int(src), int(dst)
    # 对于每一条输入的连边 src -> dst 你需要按照题目要求作相应的处理
    # 得到正确的代表图的字典 graph

    if dst not in graph:
        graph[dst] = []

    if src in graph:
        graph[src].append(dst)
    else:
        graph[src] = [dst]

start = int(input())


def ShortestPath(graph, start):
    sum_of_minDist = 0

    # looked = dict()
    # for x in graph:
    #     looked[x] = [0] * len(graph[x])

    # for x in looked:
    #     print(x, looked[x])

    point_num = len(graph)
    # print('字典长度:', point_num)
    point_short_lens = [0] * (point_num+1)
    looked = [0] * (point_num + 1)
    looked[start] = 1
    # print('test', point_short_lens[7])
    # point_short_lens[start] = 0

    # print('长度', point_num)
    q = que.Queue(point_num)
    q.put(start)
    # 你需要正确的计算顶点 start 到图graph的其他顶点的距离最小值的和 sum_of_minDist

    while q.empty() is False:
        point = q.get()
        # print(point)

        for index in range(len(graph[point])):
            current_point = graph[point][index]
            # 没走过的
            if looked[current_point] == 0:
                looked[current_point] = 1
                q.put(current_point)
                # print('{}->{}'.format(point, graph[point][index]))
                point_short_lens[current_point] = point_short_lens[point] + 1
                # print('将{}的次数变为了{}'.format(current_point, point_short_lens[point] + 1))

    # print(point_short_lens)
    for short_distance in point_short_lens:
        sum_of_minDist += short_distance
    return sum_of_minDist


print(ShortestPath(graph, start))

相关文章

  • 广度优先搜索

    广度优先搜索指出是否有A到B的路径 如果有,广度优先搜索将找出最短的路径面临类似于找最短路径的问题时,可以尝试使用...

  • python使用广度优先搜索找最短路径之和

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 读书打卡 <<算法图解-第六章 广度优先搜索>>

    1.广度优先搜索(BFS)用于解决最短路径问题 2.边(edge)和节点(node)组成图 3.实现广度优先搜索的...

  • 狄克斯特拉算法

    要计算非加权图中的最短路径, 可使用广度优先搜索。 要计算加权图中的最短路径,可使用狄克斯特拉算法。 在无向图中,...

  • python使用广度优先搜索寻找最短路径

  • 算法图解-广度优先搜索 6/11

    7 狄克斯特拉算法(带权的最短路径,地图路线中的算法)有点没看明白,下期整理。 6 广度优先搜索 广度优先搜索(b...

  • 狄克斯特拉算法

    上面图中我们可以使用广度优先搜索查找到从双子峰到金门大桥的最短路径,但这个最短路径只是因为段数最少-只有三段,但不...

  • BFS

    BFS-广度优先搜索-解决最短路径的算法之一。 什么是BFSBFS可以解决什么问题使用BFS模拟最短路线在游戏中使...

  • 广度优先搜索

    广度优先: 在最短的时间查找最优的方法。比如路径,下棋的AI算法。广度优先搜索:样一来,你不仅在朋友中查找,还在朋...

网友评论

      本文标题:python使用广度优先搜索找最短路径之和

      本文链接:https://www.haomeiwen.com/subject/vutdoctx.html