迪杰斯特拉算法-python3

1 解决的问题

从一个点出发,分别到其他各个点的最短路径

例如,从A出发,分别到B、C、D、E点的最短路径

即A -> B,A -> C,A -> D,A -> E的距离分别最小

2 算法原理

迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

迪杰斯特拉算法每次只找离起点最近的一个结点,并将之并入已经访问过结点的集合(以防重复访问,陷入死循环),然后将刚找到的最短路径的结点作为中间结点来更新相邻结点的路径长度,这样循环找到图中一个个结点的最短路径。

参考https://www.jb51.net/article/149022.htm

迪杰斯特拉(Dijkstra)算法是一种用于在图中找到单个源点到其他所有节点的最短路径的算法。这种算法适用于带权重的有向图和无向图,并且假设图中没有负权重的边。迪杰斯特拉算法的基本思想是贪心策略,即每一步都选择当前能够到达的最短路径。 以下是使用Python实现迪杰斯特拉算法的一个简单示例: ```python import sys def dijkstra(graph, start): # 初始化距离表,所有节点的距离都设置为无穷大 distances = {vertex: float('infinity') for vertex in graph} # 起点到自己的距离为0 distances[start] = 0 # 未访问的节点集合 unvisited = set(graph.keys()) while unvisited: # 选择一个未访问的最小距离节点 current_vertex = min(unvisited, key=lambda vertex: distances[vertex]) # 当前节点的距离已确定,从待访问集合中移除 unvisited.remove(current_vertex) # 遍历当前节点的邻居 for neighbor, weight in graph[current_vertex].items(): distance = distances[current_vertex] + weight # 如果找到更短的路径,则更新距离表 if distance < distances[neighbor]: distances[neighbor] = distance return distances # 示例图的表示 graph = { 'A': {'B': 1, 'C': 4}, 'B': {'A': 1, 'C': 2, 'D': 5}, 'C': {'A': 4, 'B': 2, 'D': 1}, 'D': {'B': 5, 'C': 1} } # 计算从起点A到所有节点的最短路径 print(dijkstra(graph, 'A')) ``` 这段代码首先定义了一个`dijkstra`函数,它接收一个图和一个起始点作为参数,返回一个从起始点到所有其他节点的最短路径长度的字典。然后,定义了一个示例图,并调用该函数计算从节点'A'开始的最短路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值