数据结构编程实践20讲(Python版)—14邻接矩阵

往期链接

01 数组 02 链表 03 栈 04 队列 05 二叉树 06 二叉搜索树 07 AVL树 08 红黑树 09 B树 10 B+树
11 线段树 12 树状数组 13 图形数据结构

14 邻接矩阵(Adjacency Matrix)

S1 说明

邻接矩阵是一种用二维数组表示图的结构。在一个图中,每个节点(顶点)用矩阵的行和列表示,矩阵中的元素表示节点之间的边的存在与否(及其权重)。

矩阵结构
  • 对于一个有 n n n个顶点的图,邻接矩阵是一个 n × n n×n n×n的矩阵。
  • 如果存在一条边连接顶点 i i i和顶点 j j j,则 m a t r i x [ i ] [ j ] matrix[i][j] matrix[i][j]的值为边的权重(对于无权图为 1)。
  • 如果不存在边,则 m a t r i x [ i ] [ j ] matrix[i][j] matrix[i][j]的值为 0。
特点

空间复杂度
对于一个有 n n n个顶点的图,邻接矩阵的空间复杂度为 O ( n 2 ) O(n^2) O(n2)。在稀疏图中,空间利用率较低。
查找时间:
查找两个顶点之间是否有边的时间复杂度为 O ( 1 ) O(1) O(1),非常高效。
适用场景:
适合密集图(边数接近 n 2 n^2 n2的图),因为在这种情况下,邻接矩阵的空间利用更高。不适合稀疏图(边数远小于 n 2 n^2 n2的图),因为会浪费大量空间。
易于实现:
实现相对简单,适合初学者理解图的基本概念。

S2 示例

class Graph:
    def __init__(self, num_vertices):
        self.num_vertices = num_vertices
        # 创建一个 num_vertices x num_vertices 的邻接矩阵
        self.adjacency_matrix = [[0] * num_vertices for _ in range(num_vertices)]

    def add_edge(self, u, v, weight=1):
        if u >= self.num_vertices or v >= self.num_vertices:
            print("Invalid vertex index")
            return
        self.adjacency_matrix[u][v] = weight  # 有向图
        # self.adjacency_matrix[v][u] = weight  # 无向图,取消注释即可

    def remove_edge(self, u, v):
        if u >= self.num_vertices or v >= self.num_vertices:
            print("Invalid vertex index")
            return
        self.adjacenc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AnFany

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值