首页 > 其他分享 >邻接矩阵详解

邻接矩阵详解

时间:2024-03-22 10:02:36浏览次数:13  
标签:有向图 权重 矩阵 邻接矩阵 详解 权值 顶点

邻接矩阵是图论中用于表示图(Graph)结构的一种重要数据结构,特别适用于表示顶点之间连接关系的图形。在计算机科学和数学领域,它被广泛应用来编码无向图和有向图的信息。

对于一个具有 n 个顶点的图 G=(V,E),邻接矩阵是一个 n×n 的矩阵 A,其中的行和列分别对应着图中的每个顶点。矩阵中的每个元素 (A[i][j]) 表示从顶点 i 到顶点 j 存在边的情况:

  • 在无向图中,如果顶点 i 和顶点 j 之间有一条边相连,则 (A[i][j] = A[j][i] = 1)(或者根据具体实现可能是其他非零值),由于无向图的边是双向的,所以邻接矩阵是对称的。

  • 在有向图中,如果从顶点 i 有一条指向顶点 j 的有向边,则 (A[i][j] = 1),但并不意味着必须有 (A[j][i] = 1)。这意味着有向图的邻接矩阵可能不是对称的。

此外,在某些情况下,邻接矩阵的元素还可以存储边的权重或其他属性信息,例如在带权图中,矩阵的每个非零元素可以是对应边的权重值。

利用邻接矩阵,可以方便地进行图的各种操作和分析,比如判断任意两点间是否存在边、计算节点的度数、查找路径以及进行图的遍历等等。然而,对于稀疏图(即边的数量远小于顶点数量平方的图),邻接矩阵可能会占用较大的存储空间,这时邻接表等其他数据结构可能会更加高效。

ba2ae22f5f0149b48ef90911d793b1a6.png

2d276ff97b0844ae80b63e8a3dd37883.png

在图论中,网(Network)是指带有权重的图,其中边或弧可以具有非零的权值,通常代表距离、成本或其他度量。对于这样的带权图,其邻接矩阵的表示会包含每个顶点对之间的权值信息。

网的邻接矩阵 是一个 n×n 的矩阵 A,对于有向网:

  • 矩阵中的元素 (A[i][j]) 表示从顶点 i 到顶点 j 的有向边的权值。
    • 如果没有从顶点 i 到顶点 j 的边,则 (A[i][j]) 可以被赋值为无穷大(一般用极大整数表示)或者一个特殊值(如 null 或 -1),表示不存在路径或无法到达。

对于无向网:

  • 矩阵仍然是对称的,即如果顶点 i 和顶点 j 之间存在一条无向边且带有一个权值 w,那么 (A[i][j] = A[j][i] = w)。

举例来说,假设有一个无向网,其中有三条边连接着三个顶点,并且边的权值分别为:(顶点1, 顶点2) 权重为3,(顶点1, 顶点3) 权重为5,(顶点2, 顶点3) 权重为1,则对应的邻接矩阵可能是:

| 0   3   5 |
| 3   0   1 |
| 5   1   0 |

通过邻接矩阵,我们可以直观地看出任意两点间的直接连通性和权值大小,便于进行诸如最短路径计算等图算法的操作。

42642cbc1f1a440d8e924b56900e5605.png

邻接矩阵表示法的优缺点

优点:

  • 直观、简单、好理解
  • 方便检查任意一对顶点间是否存在边
  • 方便找任一顶点的所有“邻接点”(有边直接相连的顶点)
  • 方便计算任一顶点的“度”。

缺点:

  • 不便于增加和删除顶点
  • 浪费空间——存稀疏图(点很多而边很少)有大量无效元素
  • 对稠密图(特别是完全图)还是很合算的
  • 浪费时间——统计稀疏图中一共有多少条边

 

 

标签:有向图,权重,矩阵,邻接矩阵,详解,权值,顶点
From: https://blog.csdn.net/ffffffeiyu/article/details/136907354

相关文章

  • burpsuit插件Turbo Intruder:突破速率限制详解
    一、插件介绍Turbo Intruder是一个BurpSuite扩展插件,用于发送大量HTTP请求并分析结果,可拥抱十亿请求攻击。它旨在处理那些需要异常速度、持续时间或复杂性的攻击来补充Burp Intruder。二、插件原理使用第一次请求的时候就建立好连接,后续获取资源都是通过这条连接来获取资......
  • 对象Constructor构造函数解析详解
    构造函数解析构造函数解析示例,code如下。定义实体类:packagecom.gientech.constructor;publicclassPerson{privateStringname;privateintid;privateintage;privateStringsex;publicPerson(){}publicPerson(String......
  • 二叉树详解
    二叉树详解一:什么是树1:概念2:树的特点##3:树的一些重要概念二:二叉树1:二叉树的概念2:二叉树的特点3:特殊的二叉树:三:二叉树的性质四:二叉树的存储一:什么是树1:概念树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因......
  • ConcurrentHashMap底层详解
    ConcurrentHashMap是线程安全且高效的HashMap。一、使用原因在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于此产生了ConcurrentHashMap。1.线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率......
  • nmon监控工具使用方法详解
    在信息化时代,系统监控对于确保服务器和应用的稳定运行至关重要。nmon(Nigel’sMonitor)作为一款强大的性能监控工具,以其直观、全面的监控能力,赢得了众多系统管理员的青睐。本文将详细介绍nmon监控工具的使用方法,帮助读者更好地利用这一工具,提升系统监控效率。一、nmon监控工......
  • JavaScript初识及基本语法详解
    JavaScript是一种轻量级的解释型或即时编译型的编程语言。它最初被设计为在浏览器中用于与网页进行交互,但随着时间的推移,它已经成为了后端开发、游戏开发、桌面应用开发等多个领域的重要工具。1.JavaScript初识1.1历史与用途历史:由BrendanEich在1995年开发,最初......
  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • B树B+树,字典树详解,哈夫曼树博弈树
    目录B树:B-TreeB+树字典树:TrieTree 哈夫曼树博弈树B树:B-Tree多路平衡搜索树1.M阶B树,就是M叉(M个指针)。2.每个节点内记录个数<=M-1。3.根节点记录个数>=1。4.其余节点内记录个数>=ceil(m/2)-1(向上取整)。5.每个节点内的记录从左至右从大到小有序。6.当前记录的左......
  • Impostors详解——纸片构筑的美丽幻觉
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!写在前面早前,我截帧分析了《CallofDragons》,具体内容可以看《〈CallofDragons〉渲染截帧分析与迷思》,在其中提到了《CallofDragons》中使用......
  • Linux系统下的文件描述符fd详解
    文章目录文件描述符本作者从代码及源码的角度来总结探究文件描述符fd参考:韦东山Linux嵌入式视频文件描述符Linux系统下一切皆文件。文件描述符是操作系统中用来唯一标识一个已打开文件的整数。本质上来说就是索引,即根据索引值寻找到对应的文件,可对其进行相应......