算法导论 | 第22章基本的图算法

本文详细介绍了图的种类、存储结构,重点讲解了邻接矩阵和邻接表,并提供了相关代码示例。接着,阐述了广度优先搜索(BFS)和深度优先搜索(DFS)的算法原理,以及这两种搜索方式在无向图和有向图中的应用。此外,还涉及了拓扑排序和强连通分量的概念及其算法实现。
摘要由CSDN通过智能技术生成


图的基本定义就不细讲了,可以参考“图的理论基础”,写的相当好。这里只是总结。


1:图的种类

图一般分为有向图和无向图;如果给每条边赋予一定的权值,那么这样的图叫网。


2:图的存储结构

常用的数组结构是“邻接矩阵”和“邻接表”。还有两种但是不常用:邻接多重表 和 十字链表。下面主要讲解邻接矩阵和邻接表。

-------邻接矩阵和邻接表的优缺点

①邻接表适用于稀疏图,邻接矩阵适用于稠密图

②另外,由于邻接矩阵简单明了,当图较小时,更多地采用邻接矩阵。

③如果一个图不是加权的,采用邻接矩阵还有一个好处:在储存邻接矩阵的每个元素时,可以只使用一个二进位,而不必用一个字的空间。

④需要快速判断两个结点之间是否有边相连,更多用邻接矩阵(用邻接链表需要遍历Adj[u])



(1)邻接矩阵

邻接矩阵是指用矩阵来表示图。它是采用矩阵来描述图中顶点之间的关系(及弧或边的权)。 
假设图中顶点数为n,则邻接矩阵定义为:



无向图



有向图



通常采用两个数组来实现邻接矩阵:一个一维数组用来保存顶点信息,一个二维数组来用保存边的信息。 
邻接矩阵的缺点就是比较耗费空间。


(2)邻接表

邻接表是图的一种链式存储表示方法。它是改进后的"邻接矩阵",它的缺点是不方便判断两个顶点之间是否有边,但是相对邻接矩阵来说更省空间。

无向图



有向图



3:邻接矩阵的表示和代码

(1)基本定义

// 邻接矩阵
typedef struct _graph
{
    char vexs[MAX];       // 顶点集合
    int vexnum;           // 顶点数
    int edgnum;           // 边数
    int matrix[MAX][MAX]; // 邻接矩阵
}Graph, *PGraph;

Graph是邻接矩阵对应的结构体。 
vexs用于保存顶点,vexnum是顶点数,edgnum是边数;matrix则是用于保存矩阵信息的二维数组。例如,matrix[i][j]=1,则表示"顶点i(即vexs[i])"和"顶点j(即vexs[j])"是邻接点;matrix[i][j]=0,则表示它们不是邻接点。


(2)创建矩阵

参考代码:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值