狄克斯特拉算法简单实现---python

迪克斯特拉算法

   """
    必须按广度优先的顺序添加才能得到正确结果
"""
# 邻居节点(子节点)及权重
point_all = {
    "start": {"p2": 10, "p4": 30, "p5": 100},
    "p2": {"p3": 50},
    "p4": {"p3": 20, "p5": 60},
    "p5": None,
    "p3": {"p5": 10},
}
distance_max = float("inf")
# 最短距离
costs = {
    "start": 0,
    "p2": distance_max,
    "p3": distance_max,
    "p4": distance_max,
    "p5": distance_max
}


def find_lowest_cost(point_list):
    for d in point_list:
        if point_all[d]:
            for s in point_all[d]:
                print("子节点c_d:", s, "子节点最短距离:", costs[s], "cost:", point_all[d][s], "当前节点d:", d)
                if point_all[d][s] + costs[d] < costs[s]:
                    costs[s] = point_all[d][s] + costs[d]
                    print(costs)
                    print("=============================================")
    return costs


if __name__ == '__main__':
    print("point: ", point_all.keys())
    find_lowest_cost(point_all.keys())
    print("fast costs: ", costs)


posted @ 2019-12-24 10:37  新手已上路  阅读(199)  评论(0)    收藏  举报