python 与 图

文章目录

  • 图的定义
    • 1. 邻接列表
    • 2. 邻接矩阵
  • 图的访问
    • 1. 邻接列表
    • 2. 邻接矩阵

图的定义

在 Python 中,可以使用字典来表示图。字典的键表示图中的顶点,而对应的值是与该顶点直接相连的顶点及其边的信息。

通常有两种方式来表示图:

  1. 邻接列表(Adjacency List): 使用字典来表示,其中每个顶点对应一个键,值是一个列表,存储与该顶点相邻的顶点及其边的信息。

  2. 邻接矩阵(Adjacency Matrix): 使用二维列表(或二维数组)来表示,其中每行和每列分别对应图中的顶点,矩阵元素表示顶点之间是否相连,以及边的权重信息。

下面分别介绍这两种方式:

1. 邻接列表

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’ 与 ‘B’ 和 ‘C’ 相连,边的权重分别为 1 和 4。

2. 邻接矩阵

# 定义顶点列表
vertices = ['A', 'B', 'C', 'D']# 定义邻接矩阵
graph = [[0, 1, 4, 0],[1, 0, 2, 5],[4, 2, 0, 1],[0, 5, 1, 0]
]

在这个示例中,行和列分别代表顶点 ‘A’, ‘B’, ‘C’, ‘D’,而矩阵中的元素表示两个顶点之间的边的权重。如果两个顶点之间没有边相连,则对应元素为 0。

在实际应用中,根据具体情况选择邻接列表或邻接矩阵表示图。如果图是稀疏的(即顶点之间的边相对较少),通常使用邻接列表更加高效。而如果图是稠密的(即顶点之间的边较多),则邻接矩阵更为适用。

图的访问

访问图的方式取决于图的表示方法。下面分别介绍如何访问邻接列表和邻接矩阵表示的图:

1. 邻接列表

对于邻接列表,可以通过字典的键来访问顶点,并通过键对应的值(也是一个字典)来获取与该顶点相邻的顶点及其边的信息。

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' 的相邻顶点及其边的信息
neighbors_of_A = graph['A']
print(neighbors_of_A)  # 输出:{'B': 1, 'C': 4}# 获取顶点 'A' 到顶点 'B' 的边的权重
weight_from_A_to_B = graph['A']['B']
print(weight_from_A_to_B)  # 输出:1

2. 邻接矩阵

对于邻接矩阵,可以通过行和列的索引来访问对应的顶点,并通过矩阵中的元素来获取两个顶点之间的边的权重信息。

# 定义顶点列表
vertices = ['A', 'B', 'C', 'D']# 定义邻接矩阵
graph = [[0, 1, 4, 0],[1, 0, 2, 5],[4, 2, 0, 1],[0, 5, 1, 0]
]# 获取顶点 'A' 到顶点 'B' 的边的权重
weight_from_A_to_B = graph[vertices.index('A')][vertices.index('B')]
print(weight_from_A_to_B)  # 输出:1

在邻接矩阵中,可以通过 vertices.index('顶点名称') 获取对应顶点的索引,然后使用索引来访问矩阵中的元素。

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

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

相关文章

面向对象编程:理解其核心概念与应用

引言 在编程的世界中,面向对象编程(Object-Oriented Programming, OOP)已成为一种主流的编程范式。它提供了一种组织和管理代码的有效方式,使得代码更加模块化、可重用和易于维护。本文将带您深入探讨面向对象编程的核心概念及其…

redis过期淘汰策略、数据过期策略与持久化方式

redis的过期淘汰策略 redis过期淘汰策略有很多,默认是no-eviction 不删除任何数据,内存不足存入会直接报错,可以在redis配置文件中进行设置,其中有两个非常重要的概念,LRU与LFU LRU表示最近最少使用,LFU为最少频率使用 又按照volatile已设置过期时间的数据集和allkeys所有数…

算法学习——LeetCode力扣双指针篇

算法学习——LeetCode力扣双指针篇1 27. 移除元素 27. 移除元素 - 力扣(LeetCode) 描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间&#…

软考 系统分析师系列知识点之信息系统战略规划方法(5)

接前一篇文章:软考 系统分析师系列知识点之信息系统战略规划方法(4) 所属章节: 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.3 战略集合转化法 战略目标集合转化法(Strategy Set Transformation&a…

【AIGC风格prompt深度指南】掌握绘画风格关键词,实现艺术模仿的革新实践

[小提琴家]ASCII风格,点,爆炸,光,射线,计算机代码 由冰和水制成的和平标志]非常详细,寒冷,冰冻,大气,照片逼真,流动,16K 胡迪尼模拟火和水&#x…

【计算机网络】进程通信

进程 process 客户和服务器进程 下载文件表示为客户 ,上载文件的对等方表示为服务器进程与计算机网络之间的接口 套接字 socket 应用层与传输层之间的接口是建立网络应用程序的可编程接口 API进程寻址 为了标识接收进程 需要两种信息 主机的地址目的主机中的接收进程…

ShardingSphere 5.x 系列【7】元数据持久化

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 概述2. 单机模式2.1 H22.2 MySQL3. 集群模式3.1 ZooKeeper3.2 Nacos3.3 Cons…

Java图形化界面编程——组件绘图原理 笔记

2.8 绘图 ​ 很多程序如各种小游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时, 有 时候也必须"动态"地向客户 端生成各种图形、图表,比如 图形验证码、统计图等,这都需要利用AWT的绘图功…

C 练习实例23-打印菱形

题目:打印出如下图案(菱形)。 * *** ***** ******* ***** *** * 题目分析: 先打印前4行,因为是递增关系。 第0行:打印3个空格,1个* 第1行:打印2个空格,3个*…

vue day06

1、路由模块封装 2、声明式导航 实现导航高亮效果 直接通过这两个类名对相应标签设置样式 点击a链接进入my页面时,a链接 我的音乐高亮,同时my下的a、b页面中的 我的音乐也有router-link-active类,但没有精确匹配的类(只有my页…

项目中常用的一些数据库及缓存

1、常见的开发工具介绍 MySQL: MySQL是一种流行的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,并在后来被Sun Microsystems收购,最终成为Oracle公司的一部分。MySQL广泛用于各种Web应用程序和大型企业应…

C++PythonC# 三语言OpenCV从零开发(8):图像平滑处理

文章目录 相关链接前言图像资源图像平滑处理图像学知识补充(重点)什么是卷积什么是图像滤波什么是方框滤波和均值滤波 代码PythonCCsharp 总结 相关链接 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程(附带课…

奇安信网神 SecGate3600-authManageSet.cgi登录绕过漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

《Python 网络爬虫简易速速上手小册》第8章:分布式爬虫设计(2024 最新版)

文章目录 8.1 分布式爬虫的架构8.1.1 重点基础知识讲解8.1.2 重点案例:使用 Scrapy 和 Scrapy-Redis 构建分布式爬虫8.1.3 拓展案例 1:使用 Kafka 作为消息队列8.1.4 拓展案例 2:利用 Docker 容器化工作节点 8.2 分布式任务管理8.2.1 重点基础…

硬件工程师成长之路(0)----认识元件

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1、电阻①、贴片电阻②、金属膜电阻③、水泥电阻④、制动电阻⑤、电位器⑥、压敏电阻⑦、热敏电阻⑧、光敏电阻⑨…

【Make编译控制 08】CMake动静态库

目录 一、编译动静态库 二、链接静态库 三、链接动态库 前情提示:【Make编译控制 07】CMake常用命令-CSDN博客 有些时候我们编写的源代码并不需要将他们编译生成可执行程序,而是生成一些静态库或动态库提供给第三方使用,所以我们需要用到…

路径索引详解

contents 一、前言二、/三、../四、./五、补充 一、前言 无论是在 Windows OS 还是在 Linux OS,在进行文件路径索引时,总能看到 / or ../ or ./ 的身影,下面分别解释各自的意义 二、/ / 表示从根目录开始索引 在类 Unix 操作系统中&#…

Python远程控制工具的使用

本节我们对所编写的远程控制工具的功能进行测试。首先开启主控端程序, 如下所示: 接下来打开被控端程序。当被控端打开时,主控端会收到被控端的连接请 求。 开启被控端程序: 主控端接收到连接请求并显示被控端主机的信息&#xff…

R语言【utlis】——adist():字符串近似距离(编辑距离)

Package utils version 4.2.0 Description 计算字符向量之间的近似字符串距离。这个距离是一个广义的Levenshtein(编辑)距离,给出了将一个字符串转换为另一个字符串所需的最小可能的插入、删除和替换加权数。 Usage adist(x, y NULL, costs NULL, counts FALSE…

Java集合框架(包装类、泛型)

前言: 本篇文章我们来讲解Java中的集合框架,就相当于车轮子。Java是面向对象的语言,所以相对于C语言有自身优势,就比如现成的数据结构(比如栈,队列,堆等)。Java的集合框架大家也不用…