图论基础

图论基础

①图是一种由“顶点”组成的抽象网络,网络中的各顶点可以通过“边”实现彼此的连接,表示两顶点有关联。

②顶点,表示某个事物或对象。

③边,表示事物与事物之间的关系。

④同构,不管顶点的位置在哪,边的粗细长短如何,只要不改变顶点代表的事物本身,不改变顶点之间的逻辑关系,那么就代表这些图拥有相同的信息,是同一个图。

⑤有方向的是有向图、无方向的是无向图。

⑥端点和邻接点,相邻的两个点。

⑦度、入度和出度,指向点并且相连的线数量。

⑧子图,包含于图。

⑨路径和路径长度,一个点到另一个点所经过的线。

⑩回路、环,点线连接闭环。

①①生成树,连通图的树是指其全部顶点的一个极小连通子图。(少一条边就不是连通图,多一个点就是环)

①②权值,每条边可以附有对应的值。

①③完全无向图,点和线全部连接起来。(n*(n-1)/2)

①④完全有向图,(n*(n-1))

图的邻接矩阵表示法:

◆ 邻接矩阵是对称方阵;
◆ 对于顶点vi,其度数是第i行的非0元素的个数;
◆ 无向图的边数是上(或下)三角形矩阵中非0元素个数。

◆ 对于顶点vi,第i行的非0元素的个数是其出度OD(vi);第i列的非0元素的个数是其入度ID(vi) 。
◆ 邻接矩阵中非0元素的个数就是图的弧的数目。
度=出度+入度

邻接表表示法:

邻接表的核心思想就是针对每个顶点设置一个邻居表。
需要注意的是,不管邻居表是用set,list,还是dict,都是邻接表的各种变形,最终使用哪个取决于这个图本身是什么,我们要用这个图干什么。实际应用中我们可以针对图本身特点和我们要解决问题特点针对性的构建图的表示结构。

图的邻接表的存储由边和顶点决定的,邻接矩阵则无关。

图的遍历:

(1)深度优先搜索(DFS,Depth First Search)

深度优先搜索是一个递归的过程。首先,选定一个出发点后进行遍历,如果有邻接的未被访问过的节点则继续前进。若不能继续前进,则回退一步再前进,若回退一步仍然不能前进,则连续回退至可以前进的位置为止。重复此过程,直到所有与选定点相通的所有顶点都被遍历。

深度优先搜索是递归过程,带有回退操作,因此需要使用栈存储访问的路径信息。当访问到的当前顶点没有可以前进的邻接顶点时,需要进行出栈操作,将当前位置回退至出栈元素位置。

(2)广度优先搜索(BFS,Breadth First Search)

广度优先搜索类似于树的层次遍历,是按照一种由近及远的方式访问图的顶点。在进行广度优先搜索时需要使用队列存储顶点信息。
图的遍历主要就是这两种遍历思想,深度优先搜索使用递归方式,需要栈结构辅助实现。广度优先搜索需要使用队列结构辅助实现。在遍历过程中可以看出,对于连通图,从图的任意一个顶点开始深度或广度优先遍历一定可以访问图中的所有顶点,但对于非连通图,从图的任意一个顶点开始深度或广度优先遍历并不能访问图中的所有顶点。

你可能感兴趣的:(图论,数据结构)