图论入门及基本概念

来源:互联网 发布:儿童电脑编程 编辑:程序博客网 时间:2024/06/06 06:49

1.图的含义

数据结构:点、线性表、树、图

这些数据结构都是对问题的抽象,图是比较复杂的一种。

图用符号记为G(V,E), G表示图的最大集合,V是图中所有点的集合,E是边的集合。 G=graph, V=vertex , E=edge

例如,点表示人, 边映射人与人是否认识,这就是一张人际网图;

点表示网络设备,边映射连通的网线,这就是一张设备网络图

2.图的分类

图分为有向图和无向图。有向和无向是针对边的。

有向图的应用更广泛,因为无向图可以被表示为双向的有向图,所以图的算法经常采用有向图作为输入数据。

3.图的存储

3.1图链表

即用已有的线性表去表示图

假设一个图中有N个节点,那么可以用N个链表去表示,每个链表的开头是V集合中的一个节点,链表的后续内容就是与这个点有关联的点。

3.2图矩阵

用矩阵的方式去存储图

比较:图链表存储复杂度更低;图矩阵的方便之处是可以将图作为矩阵对待,线性代数可以派上用场。

4.基本概念

4.1顶点(vertex):表示某个事物或对象

4.2边(edge):表示事物与事物之间的关系

4.3同构(Isomorphism)

4.4有向图/无向图:每条边都是有向边/无向边的图

4.5权重:每条边都有预支对应的值

4.6路径/最短路径:在图上任取2点,分别作为起点和终点。起点和终点之间不重复经过同一个点或一条边的路线就是一条路径。两个顶点之间存在路径,则称两点相通。

边的权重总和最小的路径称为最短路径。

4.7环(loop):路径的终点添加一条指向起点的边,就构成一条环。

4.8连通图/连通分量:如果图G中任意2个顶点之间都存在路径,则G为连通图。

一个图的最大(顶点数最多)连通子图,称为连通分量。对连通图来说,连通分量是其本身。

5.邻接矩阵

用一个一维数组存放图中所有顶点数据,用一个二维数组存放顶点关系的数据。这个二维数组称为邻接矩阵。

无向图的邻接矩阵一定是对称的,且主对角线一定为0(仅讨论无向简单图)

无向图中,任一顶点i的度为第i列(行)非零元素的个数。

有向图中,顶点i的出度为第i行所有非零元素的个数,顶点i的入度为第i列所有非零元素的个数。

用邻接矩阵表示图工需要n*n的空间由于无向图的邻接矩阵一定具有对称关系,所以扣除对角线为零外,仅需要上三角或下三角的数据即可,即n*(n-1)/2的空间。

6.图的遍历

深度优先遍历DFS和广度优先遍历BFS。

深度优先遍历类似于树的先序遍历,可以用递归或者栈来实现。

广度优先遍历利用队列实现。

7.最小生成树Prim算法、Kruskal算法

.

.

.

参考:http://blog.csdn.net/ppn029012/article/details/8686181