图的学习
定义
在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。
注意:顶点有时也称为节点或者交点,边有时也称为链接。
邻接: 如果两个顶点之间通过边连接起来,则称他们为邻接的。
路径: 依次遍历顶点序列之间的边所形成的轨迹。没有重复顶点的路径称为简单路径。路径的长度是路径上的边或弧的数目。
连通图: 如果至少一个路径可以连接所有顶点,就称这个图是连通图。
无向边: 若顶点 x 和 y 之间的边没有方向,则称该边为无向边(x, y),(x, y) 与 (y,x) 意义相同,表示 x 和 y 之间有连接。
无向图: 若图中任意两个顶点之间的边均是无向边,则称该图为无向图。
有向边: 若顶点 x 和 y 之间的边有方向,则称该边为有向边<x, y>,<x, y> 与 <y, x> 意义不同,表示从 x 连接到 y,x 称为尾,y 称为头。
有向图: 若图中任意两个顶点之间的边均是有向边,则称该图为有向图。
完全图: 每个顶点都与其他顶点相邻接的图。
邻接矩阵: 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边的信息。
邻接表: 邻接矩阵是不错的一种图存储结构,但是,对于边数相对顶点较少的图,这种结构存在对存储空间的极大浪费。因此,找到一种数组与链表相结合的存储方法称为邻接表。
深度优先算法(DFS): 深度优先算法使用栈来实现。
规则1、访问一个邻接的未访问节点,放入栈中
规则2、不能执行规则1时,如果栈不为空,弹出栈尾元素
规则3、规则1和规则2不能执行时说明搜索完成
广度优先算法(BFS): 广度优先算法使用队列实现。
规则1、访问一个邻接的未访问节点,放入队列中
规则2、不能执行规则1时,如果队列不为空,弹出队列头部元素
规则3、规则1和规则2不能执行时说明搜索完成
最小生成树: 最小生成树的边的数量总比顶点数目少1,比较容易通过DFS算法得到最小生成树。
有向图 && 带权图后续再学习