定义
定义解释
下图就是一张典型的图
图术语定义
无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边,用无序偶对(vi,vj)来表示
无向图:图内任意两个顶点之间的边都没有方向
有向边:顶点vi到vj的边有方向,也称为弧,用有序偶<vi,vj>表示,vi表示弧尾,vj表示弧头
有向图:图内任意两个顶点之间的边都是有向边
无向完全图:在无向图中,任意两个顶点之间都存在边。完全图有Cn2条边
有向完全图:在有向图中,任意两个顶点都存在互为相反的两条弧
子图:假设两个图 G=(V,{E}) 和 G‘=(V',{E'}),如果 V’ 属于 V 并且 E‘ 属于 E,则称 G’ 为 G 的子图
无向图顶点的度:和顶点关联边的数目
有向图 入度:顶点为头的弧的数目
有向图 出度:顶点为尾的弧的数目
注意
连通图术语
定义
连通分量:无向图中的极大连通子图
连通分量特点:
图的存储结构
1.邻接矩阵
带权的图(网)
不适用于边数相对于顶点数较少的图
2.邻接表
数组和链表相结合,数组存放顶点,链表记录顶点之间的边或弧
对于有向图,有时候会采用逆邻接表,为了更直观得到入度信息
十字链表
把邻接表和逆邻接表结合起来
例如
看图可能有点乱,其实边表结构就是存放了[弧头,弧尾,指向下一个弧头,指向下一个弧尾],结构交叉,故名为十字链表
邻接多重链表
十字链表关注的是有向图,邻接多重链表关注的是无向图,参考十字链表的边表结构
边集数组
边信息数组
例如
图的遍历
定义
从图中某一个顶点出发遍历其余顶点,且每个顶点只被遍历到一次,这一过程就叫做图的遍历
深度优先遍历(DFS depth first search)
类似树的先序遍历方法
广度优先遍历(BFS breadth first search)
类似树的层序遍历
时间复杂度和深度优先遍历是一样的
最小生成树
构造连通网的最小代价生成树称为最小生成树
如何在图中找到最小生成树呢
普里姆算法和克鲁斯卡尔算法
普利姆算法(prim)
时间复杂度为O(n²)
克鲁斯卡尔(kruskal)
时间复杂度为O(eloge)
最短路径
迪杰斯特拉算法(Dijkstra)
时间复杂度O(n三次方)
费罗伊德算法(Flovd)
时间复杂度O(n三次方)
总结
以顺序表和链表两种表为基础,针对有向图和无向图的存储结构