#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# @Time : 2022/1/31 14:14
# @Author : Jin Echo
# @File : Dijkstra.pyimport heapq
import numpy as np
import networkx as nx
import matplotlib.pyplot as pltdef dijkstra(adj, s):""":param adj: n*n的邻接矩阵:param s: 起点下标:return:"""n = adj.shape[0]  # 顶点数pqueue = []heapq.heappush(pqueue, (0, s))  # <距离 起点>二元组visited = set()pre = np.arange(n)  # 起点无父结点# 初始化distance = np.ones((n,)) * np.infdistance[s] = 0while len(pqueue) > 0:pair = heapq.heappop(pqueue)dist = pair[0]vertex = pair[1]# visited.add(s)visited.add(vertex)nodes = np.where((adj[vertex, :] < 1) & (adj[vertex, :] > 0))  # 提取当前点的邻接点nodes = list(nodes[0])for w in nodes:if w not in visited:if dist + adj[vertex][w] < distance[w]:heapq.heappush(pqueue, (dist + adj[vertex][w], w))pre[w] = vertexdistance[w] = dist + adj[vertex][w]return pre, distancedef get_sequence(pre, start, end):"""返回起点到终点的路径:param pre::param start::param end:"""res = [end]while end != start:end = pre[end]res.append(end)   # pre.index(end)res.reverse()return resif __name__ == '__main__':n, m = 5, 2G = nx.barabasi_albert_graph(n, m)  # 生成图结构plt.figure(1)nx.draw(G, with_labels=True, font_weight='bold')edges_idx = np.array(G.edges)# print(edges_idx)num_edges = (n - m) * m  # 图中的边数,也等于edges_idx.shape[0]assert num_edges == edges_idx.shape[0]# 赋值边权adj = np.ones([n] * 2) * np.inf# adj[range(n), range(n)] = 0  # 主对角线为0adj[edges_idx[:, 0], edges_idx[:, 1]] = np.random.rand(num_edges)adj[edges_idx[:, 1], edges_idx[:, 0]] = adj[edges_idx[:, 0], edges_idx[:, 1]]pre, distance = dijkstra(adj, 0)print(pre)print(distance)print(get_sequence(pre, 0, n - 1))plt.show()

参考链接:https://www.cnblogs.com/c-x-a/p/11004242.html

# Dijkstra.狄杰斯特拉
import heapq
import mathdef init_distance(graph, s):distance = {s: 0}for vertex in graph:if vertex != s:distance[vertex] = math.infreturn distancedef dijkstra(graph, s):pqueue = []heapq.heappush(pqueue, (0, s))visited = set()parent = {s: None}  # 起点无父结点distance = init_distance(graph, s)while len(pqueue) > 0:pair = heapq.heappop(pqueue)dist = pair[0]vertex = pair[1]# visited.add(s)visited.add(vertex)nodes = graph[vertex].keys()  # 提取当前点的邻接点for w in nodes:if w not in visited:if dist + graph[vertex][w] < distance[w]:heapq.heappush(pqueue, (dist + graph[vertex][w], w))parent[w] = vertexdistance[w] = dist + graph[vertex][w]return parent, distanceif __name__ == '__main__':graph_dict = {"A": {"B": 5, "C": 1},"B": {"A": 5, "C": 2, "D": 3},"C": {"A": 1, "B": 2, "D": 4, "E": 8},"D": {"B": 3, "C": 4, "E": 3, "F": 6},"E": {"C": 8, "D": 3},"F": {"D": 6},}parent_dict, distance_dict = dijkstra(graph_dict, "A")print(parent_dict)print(distanc

迪杰特斯拉算法Python版本相关推荐

  1. 最短路径 [迪杰特斯拉算法] ---图

    在网图和非网图中,最短路径的含义是不同的.      -网图是两定点经过的边打上权值之和最少的路径.      -非网图是两顶点之间经过的边数最少的路径. 我们把路径起始的第一个顶点称为源点,最后一个 ...

  2. 迪杰斯特拉算法python实现

    回顾下最短路径的地杰斯特拉算法 迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法 示例: 算法实现流程思路: 迪杰斯特拉算法每次只找离起点最近的一个结点,并将 ...

  3. 迪杰特斯拉算法+堆优化

    /* O(eloge)堆优化dj算法,在n的数量级>=1e5时必须采用这种堆优化+邻接表方式 */ struct node{int p, w;node(int a, int b):p(a), w ...

  4. 最短路径迪杰特斯拉算法

    站位 int Dijkstra(const vector<vector<int>> &edge,int start ,int end) { int vertexNum= ...

  5. 【爬虫+算法】爬取成都地铁所有站点信息,并基于迪杰特斯拉算法计算最优地铁路线

    效果图 输入四川师范大学到四川大学试试水: 对比高德地图结果: 一毛一样. 项目地址 https://github.com/AA8j/ChenduMetro 参考文章 https://blog.csd ...

  6. 2017年中兴算法大赛 迪杰特斯拉派

    总结:本人2017年参加的比赛,对于初次参加算法大赛的作者来说,异常激动又有点小窃喜,最后在赛区拿到24名的名次,名次不算高,但是对于一步步解决问题过来的我,经验与经历更为重要,再次做一个小小的总结, ...

  7. 图论的灵魂——带你走进迪杰斯特拉算法的世界

    你好,我是小黄,一名独角兽企业的Java开发工程师. 感谢茫茫人海中我们能够相遇, 俗话说:当你的才华和能力,不足以支撑你的梦想的时候,请静下心来学习 希望优秀的你可以和我一起学习,一起努力,实现属于 ...

  8. python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码

    def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径,并返回该路径和代价 print("Start Dijstra Path--") path=[ ...

  9. Python实现迪杰斯特拉算法

    一. 迪杰斯特拉算法思想 Dijkstra算法主要针对的是有向图的单元最短路径问题,且不能出现权值为负的情况!Dijkstra算法类似于贪心算法,其应用根本在于最短路径的最优子结构性质. 最短路径的最 ...

  10. Python实现迪杰斯特拉算法和贝尔曼福特算法求解最短路径

    文章目录 (一).题目 (二).导库 (三).绘制带权无向图 (四).获得最短路径 (四).实现最短路径高亮 (五).完整代码 (六).结果展示 关于Python数据分析在数学建模中的更多相关应用:P ...

最新文章

  1. java 初始化顺序_Java中对象初始化顺序的详细介绍
  2. BCH正式升级,智能合约,逐梦而来!
  3. 一张图搞懂容器所有操作 - 每天5分钟玩转 Docker 容器技术(26)
  4. 通过移位的方式实现相加算法
  5. Spring3国际化和本地化
  6. java 三大特性理解_java 三大特性--封装、继承和多态理解
  7. oracle 一些基本概念
  8. nodejs入门_如何在NodeJS中使用套接字创建专业的Chat API解决方案[入门级]
  9. 黑马博客——详细步骤(一)路由跳转和抽取公共部分代码
  10. python中模块下载方法(conda+pip)
  11. SQLFeatureNotSupportedException: isValid
  12. 《太极张三丰》原声音乐 320/mp3打包下载
  13. USACO 2021 January Contest, BronzeProblem 2. Even More Odd Photos题解
  14. 6种继承的优点和缺点
  15. vsftpd匿名登陆连接报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()(未解决)
  16. csp-j2第四题解
  17. [Pandas] 分组比例计算求和
  18. 16 个动态图:一款好用到爆的 Python 可视化利器
  19. 辉羲智能完成天使+轮融资,用创新计算平台赋能智慧出行
  20. An end-to-end heterogeneous graph representation learning-based framework for drug–target interactio

热门文章

  1. 基于python使用CV裁剪图片
  2. 学习笔记(十)在网页中添加矢量图形
  3. qt触摸屏隐藏鼠标指针
  4. 【MySQL 09】安装mysql时出现:需要这两个包perl(Data::Dumper),perl(JSON)
  5. zookeeper启动报错: Invalid configuration, only one server specified (ignoring)
  6. 在游戏界,就有了些游戏界的理解。不过本文是对某游戏开发商的信
  7. Bundle-Adjustment并行求解器
  8. 正则限定开头和取反 (否)
  9. 嗅探器c语言源码,C语言嗅探器带报告
  10. 台式电脑一般价钱多少_一般普通台式电脑价格多少为好?