<转--剑紫青天>
对于ACM图论方面的题目总是免不了首先要建图存图,使用合适的存图方式不但是AC的必要条件,解题事半功倍。
邻接矩阵
存图思想
使用一个矩阵来描述一个图,对于矩阵的第i
行第j
列的值,表示编号为i
的顶点到编号为j
的顶点的权值。
代码实现
对于邻接矩阵来说,它的代码实现都十分简单,二维数组就可以了。
优点
缺点
邻接表
邻接表在三种常用的存图方式中属于较为中庸和普遍的存图方式了,缺点不致命,优点不明显。
存图思想
一般来说,如果有边权的话,邻接表的链表存储的是一个结构体,这个结构体存储该边的终点以及边权。
代码实现
在ACM题目中,动态的数据结构一般是不被推荐的,因为动态开辟内存比较消耗时间,且写起来复杂容易出错。
大部分情况我们使用C++STL里的vector
作为链表来实现图的邻接表。
优点
缺点
链式前向星
链式前向星是前向星的升级版,因为它可以完美代替前向星,所以就跳过前向星的学习,直接学习链式前向星。
存图思想
代码实现
优点
缺点
总结
对于邻接矩阵存图来说,由于内存消耗的局限性,它的适用范围比较狭窄,几乎只能在简单图论题目中见到。
邻接表存图是最为常见的一种,绝大部分采用C++STL中的vector
实现,一般情况下大部分图论题目都能使用该存图方式。
但是链式前向星其实是一种较好替代邻接表来存图的数据结构,在邻接表存图不能使用时可以使用,几乎可以用于全部图论题目。