数据结构之图

最近要考试数据结构了,将图的相关知识点记录下,加强记忆。

1、概念:

(1)无向完全图:任意两个顶点之间都存在边,边数=n*(n-1)/2.

(2)有向完全图:任意两个顶点之间都存在方向互为相反的两条弧,边数=n*(n-1).

(3)路径的长度:路径的边或弧的数目。

2、图的存储结构:

用一维数组存储顶点,用二维数组存储边或弧的信息。

3、邻接矩阵

  以节点名横向竖向生成二位表,横着看,分别由v0到v1、v2。。。。做记录,若两节点之间有边或者以v0为弧尾的弧,就记录1,否则记录0.如果是弧或边有权值,两节点无边或弧则记录无限大,有边或弧记录权值,自己对自己记录0.

4、邻接表

如果节点很多,而弧只有1条,那么邻接矩阵很多地方都记录0,浪费了大量的空间,所以引出了邻接表。

 

邻接表的方法是把某个节点的邻节点用链表串起来。比如v0,有v1,v2,连接着,则记录

0 v0  ->  v1 ->  v2  ->  ^;

1 v1  ....

2 v2  ...

5、逆邻接表

由于邻接表只能方便查找以某个节点为弧尾的节点(出度),为了查找以它为弧头的节点(入度),所以有了逆邻接表。

将原节点弧的方向翻转,计算出邻接表,就是逆邻接表。

6、十字链表

将邻接表和逆邻接表的优点结合起来。具体略,估计不会考到。

7、图的遍历

(1)深度优先遍历(depth first search) DFS

类似树的前序遍历

思想:找到一个节点作为起始节点,然后找它最右手边的节点作为下个节点,一直找下去。如果下个右手边节点被访问过了,则回溯到上个节点,再找右手左一个的节点,依次类推,直到回溯到起始节点,完成遍历。

(2)广度优先遍历(breadth first search)

类似树的层次遍历

思想:找到一个节点作为起始节点,然后将其所有邻节点访问,再访问最右手边的节点的邻节点,直到所有节点的邻节点访问到。

8、最小生成树

概念:连接所有节点,代价最小

算法:

(1)普里姆算法(Prim)

(2)克鲁斯卡算法(kruskal)

9、最短路径

概念:A到B,路径最短。类似游戏里面的寻路算法了。

算法:

(1)迪杰斯特拉算法(Dijkstra)

(2)弗洛伊德算法(Floyd)

10、拓扑排序(Top)

用途:为了解决一个工程能否顺序进行。

算法:从AOV网中选取一个入度为0的顶点输出,然后删除此顶点和以此顶点为尾的弧,继续重复此步骤,直到全部顶点输出或者AOV网中不存在入度为0的顶点(说明是环)为止。

11、关键路径

用途:为了获取A到B顶点的最短时间

 

 

算法

posted @ 2015-10-18 22:07  LouisSong  阅读(301)  评论(0编辑  收藏  举报