基于Python+Networkx的最短路径

networkx是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等。

networkx支持创建简单无向图、有向图和多重图(multigraph);内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。networkx以图(graph)为基本数据结构。图既可以由程序生成,也可以来自在线数据源,还可以从文件与数据库中读取。

使用方法:
  1. 导入networkx,matplotlib包
  2. 建立网络
  3. 绘制网络 nx.draw()
  4. 建立布局 pos = nx.spring_layout美化作用

导入networkx,matplotlib包

import matplotlib.pyplot as plt  # 导入 Matplotlib 工具包
import networkx as nx  # 导入 NetworkX 工具包
from typing import List

使用networkx画图

# 初始化空的无向图
graph = nx.Graph()  
# 向图中添加多条赋权边: (node1,node2,weight)
graph.add_weighted_edges_from([(1, 2, 50),(1, 3, 60),(2, 4, 65),(2, 5, 40),(3, 4, 52),(3, 7, 45),(4, 5, 50),(4, 6, 30),(4, 7, 42),(5, 6, 70)]
)  
# 指定顶点位置
coordinates = {1: (2.5, 10),2: (0, 5),3: (7.5, 10),4: (5, 5),5: (2.5, 0),6: (7.5, 0),7: (10, 5)
}  
# 绘制无向图
# alpha:节点透明度
# node_color:节点颜色
# with_labels: 节点标签
nx.draw_networkx(graph, coordinates, with_labels=True, alpha=1)  

深度优先搜索遍历图

tree = nx.dfs_tree(graph, source=1, )
tree.nodes, tree.edges
(NodeView((1, 2, 4, 3, 7, 5, 6)),OutEdgeView([(1, 2), (2, 4), (4, 3), (4, 5), (3, 7), (5, 6)]))
# 画dfs_tree
nx.draw_networkx(graph, coordinates, with_labels=True, alpha=1)  # 绘制无向图
labels = nx.get_edge_attributes(graph, 'weight')  # 获取边的权值
nx.draw_networkx_edges(graph, coordinates, edgelist=tree.edges, edge_color='r', width=2)  # 设置指定边的颜色
nx.draw_networkx_edge_labels(graph, coordinates, edge_labels=labels)  # 显示边的权值
plt.show()

dijkstra算法寻找最短路

# node1->node6的最短路径为:
path:List = nx.dijkstra_path(graph, 1, 6)
path
[1, 3, 4, 6]
# 无向图,判断两点之间是否存在路径
nx.has_path(graph, 1, 6)
True

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/159879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于msvcp120.dll丢失的解决方法详解,快速解决dll丢失问题

在计算机使用过程中,经常会遇到“msvcp120.dll丢失”的错误提示。这个错误提示通常出现在运行某些程序或游戏时,造成相关应用程序可能无法正常启动或运行。那么,究竟是什么原因导致了msvcp120.dll文件的丢失呢?本文将详细解析msvc…

《算法通关村—原来如此简单》

《算法通关村—原来如此简单》 理解层序遍历 我们有一个二叉树,我们如何去进行一层一层的遍历呢? 需要我们借用一个数据结构来进行遍历,数据结构就是队列。我们首先把根节点放入队列中,然后从此进行遍历。如何进行遍历&#xf…

文件同步工具推荐:挑选高效实用的工具大揭秘

随着工作的累积,会持续产出大量电子资料和文件。如何妥善管理这些文件资料,成了一个问题。有需求就有市场,当下市场上也有很多文件同步工具。 有什么好用的文件同步工具? Zoho WorkDrive 同步网盘就是一款好用的文件同步工具&am…

K8S知识点(一)

(1)应用部署方式转变 (2)K8S介绍 容器部署容易出现编排问题,为了解决就出现了大量的编排软件,这里将的是K8S编排问题的解决佼佼者 弹性伸缩:当流量从1000变为1200可以,自动开启一个…

【实战Flask API项目指南】之五 RESTful API设计

实战Flask API项目指南之 RESTful API设计 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发的世界时…

EASYX输出文字

在EASYX中绘制出字符串和字符 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3.14、 //…

外卖行业如何借助微信管理系统实现高效运营

摘要&#xff1a;本文将介绍微信管理系统在外卖行业的应用&#xff0c;包括聚合聊天、朋友圈营销和群发功能。通过这些功能&#xff0c;外卖商家可以更高效地管理订单、与客户沟通、推广品牌和增加销售额。 一、引言 随着外卖行业的快速发展&#xff0c;竞争也日益激烈。为了…

使用LIME解释各种机器学习模型代码示例

机器学习模型变得越来越复杂和准确&#xff0c;但它们的不透明性仍然是一个重大挑战。理解为什么一个模型会做出特定的预测&#xff0c;对于建立信任和确保它按照预期行事至关重要。在本文中&#xff0c;我们将介绍LIME&#xff0c;并使用它来解释各种常见的模型。 LIME LIME…

【深度学习基础】Pytorch框架CV开发(2)实战篇

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)

0x00 k8s简介 k8s&#xff08;Kubernetes&#xff09; 是容器管理平台&#xff0c;用来管理容器化的应用&#xff0c;提供快速的容器调度、弹性伸缩等诸多功能&#xff0c;可以理解为容器云&#xff0c;不涉及到业务层面的开发。只要你的应用可以实现容器化&#xff0c;就可以部…

C++之初始化列表详细剖析

一、初始化列表定义 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟一个放在括号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(year), _month(mont…

STM32-高级定时器

以STM32F407为例。 高级定时器 高级定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车&#xff08;断路&#xff09;功能&#xff0c;这些功能都是针对工业电机控制方面。 功能框图 16位向上、向下、向上/向下自动重装载计数器。 16位可编程预分频器&#xff0c…