当前位置: 首页 > news >正文

数据结构中邻接矩阵中的无向图和有向图

一、图的基本概念(先理解这个!)

1. 什么是图?
  •  = 顶点(Vertex) + 边(Edge)

  • 顶点:表示实体(如城市、人物)

  • :表示顶点间的关系(如道路、朋友关系)

2. 无向图 vs 有向图
  • 无向图:边没有方向,像双向道路

    A — B 表示 A和B互相连接
  • 有向图:边有方向,像单行线

    A → B 表示 A指向B,但B不指向A

二、邻接矩阵是什么?

1. 基本概念
  • 邻接矩阵是一个二维表格(矩阵),用来记录顶点之间是否相连

  • 行和列都代表图中的顶点

  • 矩阵中的值

    • 1(或权重):表示相连

    • 0:表示不相连

2. 简单比喻
  • 像一份「社交关系调查表」:

    • 行:我是谁

    • 列:我认识谁

    • 表格内容:我是否认识对方


三、无向图的邻接矩阵(详细示例)

1. 示例图结构(城市交通网):
A/ \B — C\ /D

顶点:A, B, C, D
边:A-B, A-C, B-C, B-D, C-D

2. 邻接矩阵构建:
A  B  C  DA 0  1  1  0B 1  0  1  1C 1  1  0  1D 0  1  1  0
3. 详细解读:
  • A行:A与B相连(1),A与C相连(1),A与D不相连(0)

  • B行:B与A相连(1),B与C相连(1),B与D相连(1)

  • 对称性:因为是无向图,矩阵是对称的(对角线对称)

4. 为什么对称?
  • A连B 等价于 B连A

  • 所以 matrix[A][B] = matrix[B][A] = 1


四、有向图的邻接矩阵(详细示例)

1. 示例图结构(微博关注关系):
A → B↓   ↑C → D
  • A关注B、C

  • C关注D

  • D关注B

2. 邻接矩阵构建:
A  B  C  DA 0  1  1  0B 0  0  0  0C 0  0  0  1D 0  1  0  0
3. 详细解读:
  • A行:A→B(1),A→C(1),A→D(0)

  • B行:B没有关注任何人(全是0)

  • C行:C→D(1)

  • D行:D→B(1)

4. 关键特点:
  • 不对称:A关注B,但B不关注A → matrix[A][B]=1matrix[B][A]=0

  • 方向性:行→列(行指向列)


五、带权图的邻接矩阵(扩展知识)

1. 示例(城市间距离):
A5/ \3B — C2\ /4D
2. 邻接矩阵(记录权重):
A   B   C   DA 0   5   3   ∞B 5   0   ∞   2C 3   ∞   0   4D ∞   2   4   0
  •  表示不相连(或距离无穷远)

  • 数字表示实际距离


六、邻接矩阵的优缺点

优点:
  1. 快速判断是否相邻
    matrix[i][j] == 1? → O(1)时间

  2. 适合稠密图(边很多的情况)

  3. 方便计算(如求顶点的度)

缺点:
  1. 空间浪费
    对于n个顶点,需要n²空间,但很多位置是0

  2. 添加/删除顶点麻烦:需要重建矩阵


七、实战练习(检验理解)

练习1:无向图
1 — 2|   |3 — 4

请写出邻接矩阵:

答案

1  2  3  41 0  1  1  02 1  0  0  13 1  0  0  14 0  1  1  0
练习2:有向图
1 → 2↓   ↓3 → 4

请写出邻接矩阵:

答案

1  2  3  41 0  1  1  02 0  0  0  13 0  0  0  14 0  0  0  0

八、常见考试问题

Q1:如何计算无向图顶点的度?
  •  = 顶点连接边的数量

  • 在邻接矩阵中 = 对应行(或列)中1的个数
    示例:前面无向图中B的度 = B行中1的个数 = 3

Q2:如何计算有向图顶点的入度和出度?
  • 出度:从顶点指出的边数 = 对应行中1的个数

  • 入度:指向顶点的边数 = 对应列中1的个数
    示例:前面有向图中B的入度 = B列中1的个数 = 2(A→B, D→B)


通过以上详细的示例和解析,你应该能够:

  1. 区分无向图和有向图的邻接矩阵

  2. 自己构建给定图的邻接矩阵

  3. 从邻接矩阵还原图结构

  4. 计算顶点的度、入度、出度

http://www.dtcms.com/a/341767.html

相关文章:

  • 流固耦合|01流固耦合分类
  • 面试 TOP101 二分查找/排序专题题解汇总Java版(BM17 —— BM22)
  • Alpha测试:软件上线前的关键环节
  • 意象框架:连接感知与认知的统一信息结构分析——基于上古汉语同源词意义系统的词源学与认知语言学探索
  • 深入理解与应用向量嵌入(Vector Embeddings):原理、实现与多场景实践
  • 轻量级流程编排框架,Solon Flow v3.5.0 发布
  • WEB安全篇:浏览器攻击原理及防护
  • 软件设计师——数据结构与算法基础学习笔记
  • mac安装Trae并解决App Unavailable问题
  • 【Java进阶】Java JIT 编译器深度解析与优化实践
  • 49.Seata-XA模式
  • Day57 Java面向对象12 多态
  • 齐次线性方程组最小二乘解
  • 压缩包密码找回工具递归解压增强版使用说明
  • 机器学习数据预处理学习报告
  • Linux用30秒部署Nginx+Tomcat+Mysql+Jdk1.8环境
  • Paging in Operating System
  • windows server 彻底卸载oracle 11g
  • Linux命令大全-ps命令
  • AdaCoT:基于强化学习的帕累托最优自适应思维链触发机制
  • 自动泊车辅助系统的漏洞、威胁与风险分析
  • MDP(马尔可夫决策过程)与 RL(强化学习)
  • 半导体开关器件深度解析:PNP、NPN、PMOS、NMOS
  • 使用PCL读取PCD点云文件
  • MTK Linux DRM分析(一)- DRM简介
  • 基于STM32的感应开关盖垃圾桶
  • 基于Pytochvideo训练自己的的视频分类模型
  • 数据结构-有序二叉树
  • 中科米堆CASAIM手持式三维扫描仪扫描塑料件检测尺寸形位公差
  • Cobbler:一站式自动化系统部署方案