(b1)邻接矩阵
看清一张图如何装进矩阵:构造细节、矩阵幂与路径计数、选型边界
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
(b1)邻接矩阵
看清一张图如何装进矩阵:构造细节、矩阵幂与路径计数、选型边界
接口
邻接矩阵那张表你看到了——n×n 的格子,0 和 1 填在里面。但程序里你不会直接戳那些格子,你会调方法:addVertex、addEdge、adj……这些方法的「签名清单」,就是邻接矩阵的接口。
插座规定电压、孔型(接口约定),里面是铜片还是合金(实现细节)你不管;电器按标准造,换品牌也能插
邻接矩阵+关联矩阵
上一页我们认识了邻接矩阵,它用n×n方阵记录「顶点之间是否相邻」。但图论里还有一类问题:「这条边连了哪两个端点」——邻接矩阵回答起来很别扭,需要请出关联矩阵。
通讯录按人查「认识谁」(顶点→顶点);签到表按活动查「谁来参加」(顶点→边)
实例
前几页讲了邻接矩阵的接口——行是起点、列是终点、里面写 0 或 1。但抽象的表格看着不过瘾。这一页用 4 个顶点的小图把它算出来,看看到底怎么写、有什么规律、什么时候用最划算。
通讯录第 i 行第 j 列打 √ ↔ 矩阵 A[i][j]=1
顶点和边
邻接矩阵每个格子编码两个顶点之间的边关系。要真正用好矩阵,先回到最底层——顶点和边本身是什么。
城市=顶点,公路=边;研究路网本质就是研究图
邻接矩阵
图的骨架是顶点和边。但图一大(百万级顶点),计算机靠肉眼数不过来——它需要一张结构化的「表」来回答「两点能否直达」「走 k 步有几条路」这类问题:邻接矩阵。
行=出发城市,列=到达城市;格子=直飞数;A²则是经一次中转的路径数
顶点静态操作
邻接矩阵让我们 O(1) 判断两顶点是否相连,但「连了谁、怎么加、怎么删」这些针对顶点本身的操作,才是构建和修改图的基础。这页把它们摊开,看清每一步的真实代价。
加座位=矩阵加行加列;拆座位=撕行撕列再前移;按票号查=直查,按姓名查=逐行扫
边操作
上一页我们搭好了矩阵的骨架,现在问题来了:边怎么操作?在邻接矩阵里,每条边都对应矩阵中的一个格子——这让边操作异常直接。
每个 (u,v) 是一个单元格;查、增、删都是直接定位到那个格子读写
顶点动态操作
静态操作只看,动态操作要改。当图的结构在变化——加一个点、减一个点——邻接矩阵会怎么响应?这页我们把增删顶点的代价算清楚。
新同学要占一行一列,老师要重新填一遍和所有人的关系
综合评价
前面我们一层层剥开邻接矩阵:从定义、接口,到增删操作。现在把所有线索收拢,回答最关键的问题:它强在哪、短在哪、最该用在哪。
n 人占 n×n 格,标1代表两人认识;查任意两人是否相连只看一眼,但人数一变整张表都要重排
本节要点
- ✓查边 O(1)、边操作 O(1):但空间固定为 V²
- ✓顶点增删最坏 O(V²):图结构变化时需谨慎
- ✓适合稠密图:边数接近 V² 时空间利用率最高
- ✓用一维数组可省一半空间:因无向图矩阵对称且对角无用
- ✓顶点频繁变化时改用邻接表:邻接矩阵会反复拷贝
课后思考
三个开放性问题检验理解程度