如何用Python实现图论算法?python图论算法入门教程

在 Python 中,图论(Graph Theory)通常通过专门的库来实现,最常用的是 NetworkX 和 igraph,对于大规模图或需要高性能计算的场景,还可以使用 Graph-tool 或结合 NumPy/SciPy 处理稀疏矩阵。

下面我将以 NetworkX 为主,介绍 Python 中图论的基本操作、常用算法和可视化方法。

【蓝桥杯】Python速成 课时9 图论:建图、图遍历、Dijkstra、Floyd
加载中
【蓝桥杯】Python速成 课时9 图论:建图、图遍历、Dijkstra、Floyd

安装依赖

pip install networkx matplotlib
  • networkx:用于构建图、运行算法。
  • matplotlib:用于可视化图结构。

基本图操作

创建图

import networkx as nx
import matplotlib.pyplot as plt
# 创建无向图
G = nx.Graph()
# 添加节点
G.add_node(1)
G.add_nodes_from([2, 3, 4])
# 添加边
G.add_edge(1, 2)
G.add_edges_from([(2, 3), (3, 4), (4, 1)])
# 查看图的基本信息
print("节点:", G.nodes())
print("边:", G.edges())
print("节点数:", G.number_of_nodes())
print("边数:", G.number_of_edges())

有向图与加权图

# 有向图
DG = nx.DiGraph()
DG.add_edge(1, 2, weight=0.6)
DG.add_edge(2, 3, weight=1.0)
# 加权无向图
WG = nx.Graph()
WG.add_weighted_edges_from([(1, 2, 0.5), (2, 3, 0.8), (3, 1, 1.2)])

如何用Python实现图论算法?python图论算法入门教程


常用图算法

最短路径(Dijkstra / Bellman-Ford)

import networkx as nx
G = nx.Graph()
G.add_weighted_edges_from([(1, 2, 0.4), (2, 3, 0.8), (3, 4, 0.3), (1, 4, 1.5)])
# 最短路径
path = nx.shortest_path(G, source=1, target=4, weight='weight')
print("最短路径:", path)
# 最短路径长度
length = nx.shortest_path_length(G, source=1, target=4, weight='weight')
print("最短路径长度:", length)

最小生成树(Prim / Kruskal)

G = nx.Graph()
G.add_weighted_edges_from([(1, 2, 1), (2, 3, 2), (3, 4, 3), (4, 1, 4), (2, 4, 5)])
mst = nx.minimum_spanning_tree(G)
print("最小生成树的边:", mst.edges())

连通性分析

G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3), (4, 5)])
# 连通分量
components = list(nx.connected_components(G))
print("连通分量:", components)
# 是否连通
print("是否连通:", nx.is_connected(G))

中心性分析

如何用Python实现图论算法?python图论算法入门教程

G = nx.karate_club_graph()  # 示例图:空手道俱乐部网络
# 度中心性
degree_centrality = nx.degree_centrality(G)
print("度中心性:", degree_centrality)
# 介数中心性
betweenness_centrality = nx.betweenness_centrality(G)
print("介数中心性:", betweenness_centrality)
# 接近中心性
closeness_centrality = nx.closeness_centrality(G)
print("接近中心性:", closeness_centrality)

社区发现(Louvain / Girvan-Newman)

import community  # 需要 pip install python-louvain
G = nx.karate_club_graph()
partition = community.best_partition(G)
print("社区划分:", partition)

图的可视化

import networkx as nx
import matplotlib.pyplot as plt
G = nx.karate_club_graph()
pos = nx.spring_layout(G)  # 使用弹簧布局
# 绘制节点
nx.draw_networkx_nodes(G, pos, node_color='lightblue', node_size=500)
# 绘制边
nx.draw_networkx_edges(G, pos, edge_color='gray')
# 绘制标签
nx.draw_networkx_labels(G, pos, font_size=10, font_family='sans-serif')
"Karate Club Graph")
plt.axis('off')
plt.show()

其他常用库对比

如何用Python实现图论算法?python图论算法入门教程

库名 特点 适用场景
NetworkX 易用、功能丰富、支持多种图算法 中小规模图、教学、原型开发
igraph 高性能、支持大规模图 大规模网络分析
Graph-tool 基于 C++,性能极高 超大规模图、统计推断
SciPy sparse 稀疏矩阵操作 图作为邻接矩阵处理

实际应用场景

  1. 社交网络分析:朋友关系、影响力传播
  2. 推荐系统:用户-物品二部图
  3. 交通网络:最短路径、最小生成树
  4. 生物信息学:蛋白质相互作用网络
  5. Web 页面排名:PageRank 算法

进阶:PageRank 算法

G = nx.DiGraph()
G.add_edges_from([(1, 2), (1, 3), (2, 3), (3, 1), (3, 2)])
pagerank = nx.pagerank(G)
print("PageRank 值:", pagerank)

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/%e5%a6%82%e4%bd%95%e7%94%a8python%e5%ae%9e%e7%8e%b0%e5%9b%be%e8%ae%ba%e7%ae%97%e6%b3%95%ef%bc%9fpython%e5%9b%be%e8%ae%ba%e7%ae%97%e6%b3%95%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b/

赞 (0)
cdn缓存动态内容怎么设置,CDN缓存
上一篇 2026年7月10日 06:31
如何用Python处理气候数据?python气候数据分析教程
下一篇 2026年7月10日 06:33

相关推荐

  • Python速度有多快?Python执行速度慢怎么优化

    Python 的运行速度确实比 C++ 或 Java 慢,但在大多数业务逻辑场景下,通过合理优化和使用加速库,其性能差距已缩小至可接受范围,甚至能超越解释型语言并接近编译型语言的效率,很多人对 Python 的第一印象就是“慢”,这并非空穴来风,Python 是一种解释型、动态类型的语言,它在运行时需要进行大量……

    2026年7月7日
    10900
  • 服务器防火墙端口怎么开放,服务器开放防火墙端口命令

    服务器开放防火墙端口是保障业务连续性与系统安全的关键操作,核心原则在于“最小化权限”与“精准化配置”,开放端口绝非简单的“打通墙洞”,而是一个涉及业务梳理、规则配置、权限收缩与持续监控的闭环过程, 盲目开放端口会导致服务器直接暴露在公网攻击之下,而配置不当则可能引发服务不可用,专业且规范的端口开放流程,必须在确……

    2026年3月27日
    9800
  • 山东企业租服务器年付和月付费用怎么算,哪个更划算?

    山东企业租服务器,年付方案的总费用通常低于月付,但月付在初期投入和灵活性上更有优势,具体费用需根据配置、带宽、机房等级以及合同期限综合计算,山东企业租服务器年付和月付的费用差异分析年付套餐的定价逻辑服务商愿意给年付客户让利,本质是锁定长期合作,降低续费流失率和运维成本,年付方案下,月均单价通常比月付低出一截,具……

    2026年8月11日
    600
  • 个人bi是什么意思?个人bi报表工具怎么选

    个人BI(Business Intelligence,商业智能)是指个人利用数据工具和分析方法,将杂乱的信息转化为可执行的洞察,从而辅助日常决策、优化工作流程并提升个人竞争力的过程,很多人听到“商业智能”这个词,第一反应是大型企业的ERP系统或昂贵的Tableau、Power BI企业版,这种认知已经滞后了,在……

    2026年6月21日
    2000
  • 战斗大师有哪些服务器,哪个服务器人气最高?

    《战斗大师》的服务器体系并非单一划分,而是依据运营主体、设备平台和区域网络,分为官方服、渠道服、国际服三大类,其下再细分为iOS服、安卓服和混服专区,这套架构决定了你和谁一起玩、充值入口在哪,以及后续转服和账号交易的边界,下文将为你拆解每一类服务器的具体分布、识别方式和选择建议,官方服与渠道服:最核心的分野官方……

    2026年9月1日
    900
  • 如何取消服务器密码?服务器密码取消方法

    安全风险远大于便利收益,专业建议应采用更优替代方案核心结论:不建议直接取消服务器密码,密码取消虽能提升操作便捷性,但会显著放大安全风险,导致服务器暴露于未授权访问、数据泄露、勒索攻击等严重威胁之下,专业运维实践表明,应通过多因素认证(MFA)、密钥认证+权限最小化、自动化运维工具集成等方案,在保障安全前提下优化……

    2026年4月15日
    6500
  • 服务器更新代码怎么做,服务器代码更新命令有哪些

    服务器更新代码是运维生命周期中的关键节点,其核心不在于简单的“文件替换”,而在于建立一套标准化的、可回滚的发布流程,以确保业务连续性、数据完整性和系统高可用性,任何一次代码变更都伴随着潜在风险,只有通过严谨的预发布验证、平滑的切换策略以及完善的回滚机制,才能将服务器更新代码带来的风险降至最低,实现高效、稳定的版……

    2026年2月23日
    13200
  • 个人怎么注册域名邮箱?域名邮箱怎么申请

    购买独立域名后,通过Cloudflare、Namecheap或阿里云等服务商配置MX记录,即可实现免费或低成本的专业邮箱服务,彻底摆脱公共邮箱的局限,很多人对邮箱的认知还停留在@163.com或@qq.com阶段,但在职业发展和个人品牌塑造中,使用自定义域名邮箱(如name@yourdomain.com)是提升……

    2026年5月31日
    5400
  • 服务器怎么开发?服务器开发入门教程详解

    服务器开发是一个从底层架构设计到上层业务逻辑实现的系统工程,核心结论在于:构建高性能、高可用、高并发的服务端应用,必须遵循严谨的技术选型、清晰的分层架构设计以及严格的工程化开发流程,这不仅是代码的堆砌,更是对计算资源、网络协议与数据存储的深度整合与优化, 明确需求与技术选型:开发的基石在着手编写代码之前,深入的……

    2026年3月18日
    11200
  • 个人真的可以购买服务器吗?个人购买服务器流程及注意事项

    个人完全可以购买服务器,且通过主流云服务商或实体硬件租赁,能以极低的门槛搭建个人网站、开发测试环境或部署私有云存储,在2026年的互联网生态中,服务器早已不再是科技巨头或大型企业的专属特权,随着云计算技术的成熟和硬件成本的进一步下探,个人用户获取计算资源的路径变得异常清晰,无论是为了展示个人技术博客,还是为了运……

    2026年6月12日
    4510

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注