数据结构与算法(6)-图

一.图的定义

1.定义:

(1)图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合

(2)图按照有无方向分为无向图和有向图。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之分

(3)图按照边或弧的多少分稀疏图和稠密图。如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图

(4)图中顶点之间有邻接点、依附的概念。无向图顶点的边数叫做度,有向图顶点分为入度和出度

(5)图上的边或弧上带权则称为网

(6)图中顶点间存在路径,两顶点存在路径则说明是连通的,如果路径最终回到起始点则称为环,当中不重复叫简单路径。若任意两顶点都是连通的,则图就是连通图,有向则称强连通图。图中有子图,若子图极大连通则就是连通分量,有向的则称强连通分量

(7)无向图中连通且n个顶点n-1条边叫生成树。有向图中一顶点入度为0其余顶点入度为1的叫有向树。一个有向图由若干棵有向树构成生成森林

二.图的抽象数据类型

三.图的存储结构

1.邻接矩阵

图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图
(1)设图G有n个顶点,则邻接矩阵是一个n×n的方阵,定义为:

无向图

有向图

2.邻接表
(1)定义:

图中顶点用一个一维数组存储,当然,顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。

图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点vi的边表,有向图则称为顶点vi作为弧尾的出边表。

无向图的邻接表结构

有向图的邻接表结构

3.十字链表

(1)十字链表的好处就是因为把邻接表和逆邻接表整合在了一起,这样既容易找到以vi为尾的弧,也容易找到以vi为头的弧,因而容易求得顶点的出度和入度

十字链表

4.邻接多重表
5.边集数组
(1)边集数组是由两个一维数组构成。

一个是存储顶点的信息;另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成

边集数组

四.图的遍历

1.深度优先遍历
(1)深度优先遍历(Depth_First_Search),也有称为深度优先搜索,简称为DFS

深度优先遍历

2.广度优先遍历
(1)广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS

广度优先遍历

五.最小生成树

1.普里姆(prim)算法
2.克鲁斯卡尔(Kruskal)算法

六.最短路径

1.迪杰斯特拉(Dijkstra)算法
2.弗洛伊德(Floyd)算法

七.拓扑排序

1.拓扑排序算法

八.关键路径

1.关键路径算法原理
2.关键路径算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值