算法——图之无向图

本文介绍了图的概念和分类,重点讲述了无向图的表示方法,包括邻接矩阵、边的数组和邻接表数组,其中邻接表数组在空间效率和访问相邻节点方面更具优势。接着,文章讨论了图的搜索算法,提供了深度优先搜索(DFS)和广度优先搜索(BFS)的模板,并指出在寻找最短路径时应使用广搜。最后,提到在实际应用中,如何处理字符串类型的节点,可以使用符号表将其映射为整数进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图的概念

图是算法中是树的拓展,树是从上向下的数据结构,结点都有一个父结点(根结点除外),从上向下排列。而图没有了父子结点的概念,图中的结点都是平等关系,结果更加复杂。


图的分类

图可以分为无向图(简单连接),有向图(连接有方向),加权图(连接带权值),加权有向图(连接既有方向又有权值)。


这篇讨论无向图。

无向图的表示方法:

1.邻接矩阵
2.边的数组
3.邻接表数组


1.邻接矩阵

我们可以使用一个V*V的布尔矩阵graph来表示图。当顶点v和顶点w之间有边相连时,则graph[v][w]和graph[w][v]为true,否则为false。

但是这种方法需要占用的空间比较大,因为稀疏图更常见,这就导致了很多空间的浪费。V*V的矩阵很多时候我们是不能接受的。


2.边的数组

我们可以使用一个数组来存放所有的边,这样的话数组的大小仅有E。但是因为我们的操作总是需要访问某个顶点的相邻节点,对于这种数据类型,要访问相邻节点的话必须遍历整个数组,造成效率的低下,所以我们在这里也不使用这个数据结构。


3.邻接表数组

我们使用一个链表数组来表示,数组中每个元素都是链表表头,链表中存放对应下标的节点所连接的边。

这种数据结构使用的空间为V+E。并且可以相当方便的获取相邻节点。

如图:




实现如下:

imp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值