【数据结构】图的介绍

来源:互联网 发布:电影特效软件 编辑:程序博客网 时间:2024/05/19 19:40

1.图的定义

  • 图是一种复杂的非线性结构。

  • 在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。

  • 图G由两个集合V(顶点Vertex)和E(边Edge)组成,定义为G=(V,E)

2.图的相关概念

(1)有向图与无向图

  • 有向图:顶点对< x ,y >是有序的;无向图:顶点对< x,y >是无序的。

  • 无向图:图中任意两个顶点时间的边都是无向边(顶点Vi到Vj之间的边没有方向)。

这里写图片描述

(2)完全无向图与完全有向图

  • 完全无向图:若有n个顶点的无向图有n(n-1)/2 条边, 即任意两个顶点之闻都存在边

  • 完全有向图:有n个顶点的有向图有n(n-1)条边, 即任意两个顶点之阅都存在方向互为相反的两条弧

这里写图片描述

(3)权与网

  • 权:与图的边或弧相关的数

  • 网:带权的图

(4)度

  • 无向图顶点的边数叫做度

  • 有向图顶点分为入度和出度。

(5)其它

  • 自环(Loop):若一条边的两个顶点为同一顶点,则此边称作自环。

  • 路径(Path):路径长度:指一条路径上经过的边的数量。回路:指一条路径的起点和终点为同一个顶点。

  • 连通图:如果在一个无向图中从每一个顶点到每个其他顶点都存在一条路径,则称该无向图是联通的,具有这样的有向图成为强连通图。

3.图的存储结构

(1)邻接矩阵

邻接矩阵( Adjacency Matrix) 存储方式是用两个数组来表示圈。一个一维数组存储圈中顶点信息,一个二维数组〈称为邻接矩阵)存储图中的边或弧的信息。

(2)邻接表

数组与链表相结合的存储方法称为邻接表,关心出度问题,但想了解入度就必须要遍历整个图才知道。而逆邻接表解决了入度却不了解出度的情况。

(3)十字链表

把邻接表和逆邻接表结合起来

(4)边集数组

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

(5)图解

这里写图片描述

4.图的遍历方式

(1)深度优先遍历

  • 深度优先遍历,也有称为深度优先搜索,简称DFS。其实,就像是一棵树的前序遍历。

  • 它从图中某个结点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到。若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中的所有顶点都被访问到为止。

这里写图片描述

(2)广度优先搜索遍历

  • 广度优先搜索遍历BFS类似于树的按层次遍历

  • 首先访问出发点Vi,接着依次访问Vi的所有未被访问过的邻接点Vi1,Vi2,Vi3,…,Vit并均标记为已访问过。然后再按照Vi1,Vi2,… ,Vit的次序,访问每一个顶点的所有未曾访问过的顶点并均标记为已访问过,依此类推,直到图中所有和初始出发点Vi有路径相通的顶点都被访问过为止。

这里写图片描述

5.最小生成树

(1)定义

  • 生成树是将图中所有顶点以最少的边连通的子图。

  • 构造连通网的最小代价生成树称为最小生成树

(2)两种算法

  • 克鲁斯卡尔算法主要是针对边来展开,边数少时效率会非常高,适用于稀疏图

  • 普里姆算法对于边数非常多的情况效率高,适用于稠密图。

6.最短路径

(1)定义

两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点

(2)两种算法

  • 弗洛伊德( Floyd )算法适用于求所有顶点至所有顶点的最短路径问题

  • 迪杰斯特拉( Dijkstra ) 算法:按路径长度递增的次序产生最短路径,时间复杂度是O(n2) 。

7.拓扑排序

设G=(v,E)是一个具有n 个顶点的有向图, V 中的顶点序列Vl ,V2,… … , Vn ,满足若从顶点VI 到V,有一条路径, 则在顶点序列中顶点V,必在顶点Vj 之前。则我们称这样的顶点序列为一个拓扑序到。即对一个有向图构造拓扑序列的过程。



本人才疏学浅,若有错,请指出
谢谢!

原创粉丝点击