图:
基本概念:
一个图是由两个集合:V和E所组成的,V是有限的非定顶点集合,E是用顶点对表示的边(edge)集合,
图G的顶点集和边集分别记为V(G)和E(G),而将图G表示为G=(V,E),也就是说,决定一个图需要知道它的顶点集合和边的集合。
无向图:边不带方向,表示为<B,C> (注意是方括号)
有向图:边带方向,表示为(B,C)(注意是圆括号)
度:一个顶点关联的边的数量
入度:进到顶点的边的数量
出度:从顶点发出的边的数量
子图:设G ‘ 和G是两个图,若有V(G ’ ) 包含于 V(G),E(G ‘ )包含于E(G),则称G ’ 是G的子图。
完全图:无向图中,每对顶点之间都有一条边相连,则称这个无向图为完全图;有向图中,每对顶点之间都有二条有向边相连,则称这个有向图为完全图。
路径:从一个顶点到另一个顶点的边组成的序列。边的数目就是路径的长度。
回路:从一个顶点出发又回到这个顶点的路径称为回路。
简单回路:除了起点和终点相同,路径的序列没有其他元素相同,即在路径上不走重复顶点。
复杂回路:路径的序列除首尾外还有元素相同,即在路径上有重复顶点。
连通图:图中任何两个顶点之间都有路径可以到达的图。
有向图的强连通:每两点之间都可以互相到达,双向连通。
有向图的弱连通:两点之间有单向连通。
连通分量:一个图被割离成几部分,每个相连的部分称为连通分量。
网络:加上权值的图。
图的存储:
邻接矩阵:假设一个图有n个顶点,编号为1,2,...,n,用一个n阶方阵R来存放图中各结点的关联信息,其矩阵元素Rij定义为:
若顶点i到顶点j有边,Rij = 1;若顶点i到顶点j无边,Rij = 0
邻接表:首先把每个顶点的邻接点用链表示出来,该表的结点结构可以设计为vertex link(顶点的链?我也不懂),这样n个顶点就有n个链表。
然后用一个一维数组来顺序存储上面每个链表的头指针。一维数组的元素也可以设计成为vertex link,
这样只要知道数组的元素就可以确定该顶点与之相关联的顶点信息。
图的遍历:
图的遍历分为深度优先和广度优先。深度优先的遍历方法:
1、首先访问出发的顶点V
2、依次从V出发搜索V的每个邻接点W
3、若W未访问过,则从该点出发继续深度优先遍历类似于树的前序遍历
(意思就是类似前序遍历从根开始再左最后右访问)
广度优先的遍历方法:
1、首先访问出发的顶点V
2、然后访问与顶点V邻接的全部未访问顶点W、X、Y。。。
3、然后再依次访问W、X、Y。。。邻接的未访问的顶点
(意思就是按层级一层层访问)