图的几种储存方式,邻接矩阵,邻接表,逆邻接表,十字链表。邻接表中储存着该元素的下一个节点可以到达的节点,逆邻接表中储存的是可以在下一个节点直接到达该点的元素,十字链表综合了两种表的特性,但是就概念模型而言,比较耗费存储空间,做内存优化之后,将边看成元素,储存相邻两个节点的index,在链表的后面,存入边,如图所示:
在遍历图时,对图中的每个顶点至多调用一次(DFS)函数,(深度优先搜索),因为一旦某个顶点被标志成已被访问,就不再从它出发进行搜索,因此,遍历图的过程实质上就是对每个顶点查找其邻接点的过程,其时间消耗则取决于所采取的存储结构,当采用邻接矩阵来储存时,时间的复杂度为
O
(
n
2
)
O(n^2)
O(n2),当采用邻接链表储存时,所需时间为
O
(
e
)
O(e)
O(e),e为无向图中中弧的个数。由此,当以邻接表作为存储结构时间,深度搜索遍历图的时间复杂度为
O
(
n
+
e
)
O(n+e)
O(n+e)。广度优先算法与深度优先算法相似。