数据结构 — 图的概述
2015-11-19 14:56
316 查看
一、基础知识
1、欧拉闭迹:每个顶点的度均为偶数,才可能存在从任意顶点出发,经过所有边恰好一次,并最终回到出发顶点的走法。
2、定义:图G = (V,E)由有穷非空集合V(G)-> 顶点(vertex) 和 有穷允空集合E(G) -> 边(edge)构成。
3、分类:无向图 ->(v0,v1)和(v1,v0)表示同一条边,有向图 ->(v0,v1)表示顶点v0为尾,顶点v1为头的边,即v0指向v1。
4、概念:
1)限制:(1)不能有自身环 (2)同一条边在图中不能出现两次或者两次以上即多重图
2)完全图:具有边数最多的图,对于n个顶点的无向图,边数为 n*(n-1)/2;对于n个顶点的有向图,边数为n(n-1)。
3)边(v0,v1)与v0和v1关联;边(v0,v1)、(v0,v2)和(v0,v3)关联于 v0。
4)简单路径:路径上除了起点和终点可能相同外,其余顶点都互不相同。环路(回路)是起点和终点相同的简单路径。
5)连通分支,即分支,无向图中的极大连通子图;有向图G每对不同的顶点vi和vj,都存在vi到vj 以及vj到vi的有向路径则为强连通;强连通分支是有向图的极大强连通子图。
6)顶点的度(degree)是关联与该顶点的边的条数;入度(in-degree)定义为 箭头指向v的边数;出度(out-degree)相反;
7) 边(edge)带权值(weight)的图成为网络(network)。
二、图的存储(之后要写几个示例,这里用文字简单说说)
(1)邻接矩阵 (2)邻接表(适合稀疏图)(3)逆邻接表(方便求顶点的度)(4)邻接多重表(方便找到第二顶点和标记扫过的边)
三、图的连通性
1、连通
在无向图G中,v0 与 v1 之间存在一条路径,称v0 与 v1 是连通的;G为无向图,所以必然存在一条v0到v1的路径;当任意两个节点vi 与 vj之间都存在一条路径,则称无向图G是连通的。
2、连通分支
在无向图G中,一个极大连通子图则称为无向图G的连通子图。
3、强连通
在有向图G中,任意两个节点vi与 vj之间 可以任意到达(vi -> vj 或 vj ->vi)则称该有向图G是强连通的。
4、强连通分支
强连通分支时有向图的极大强连通子图。
5、关节点
在图G中,存在节点v ,当删除该节点以及关联在该节点上的所有边后,得到的图G’至少包含两个连通分支,那么该节点v 则成为图G 的关节点。
6、双连通图
双连通图是没有关节点的连通图。
7、双连通分支
在图G中一个最大的双连通子图。
8、求解图的双连通分支的思路
1)最大的双连通子图 -> 双连通图 -> 关节点
2)如果顶点v是深度优先生成树的根结点,且v至少有两个儿子,则v为关节点;如果v 不是生成树的根节点,那么当且仅当v有个儿子w,使得low(w)>= dfn(v),则v为关节点。
注释:
dfn(v):深度优先编号,在深度优先搜索过程中被访问的顺序。
low(v):从v 出发,经过一条由w形成的路径 和 一条回退边所能到达的具有最小深度优先编号的 顶点的编号。(说白了就是,他儿子节点能回到的最小深度优先编号,如果比他大,说明该点是关键点)
1、欧拉闭迹:每个顶点的度均为偶数,才可能存在从任意顶点出发,经过所有边恰好一次,并最终回到出发顶点的走法。
2、定义:图G = (V,E)由有穷非空集合V(G)-> 顶点(vertex) 和 有穷允空集合E(G) -> 边(edge)构成。
3、分类:无向图 ->(v0,v1)和(v1,v0)表示同一条边,有向图 ->(v0,v1)表示顶点v0为尾,顶点v1为头的边,即v0指向v1。
4、概念:
1)限制:(1)不能有自身环 (2)同一条边在图中不能出现两次或者两次以上即多重图
2)完全图:具有边数最多的图,对于n个顶点的无向图,边数为 n*(n-1)/2;对于n个顶点的有向图,边数为n(n-1)。
3)边(v0,v1)与v0和v1关联;边(v0,v1)、(v0,v2)和(v0,v3)关联于 v0。
4)简单路径:路径上除了起点和终点可能相同外,其余顶点都互不相同。环路(回路)是起点和终点相同的简单路径。
5)连通分支,即分支,无向图中的极大连通子图;有向图G每对不同的顶点vi和vj,都存在vi到vj 以及vj到vi的有向路径则为强连通;强连通分支是有向图的极大强连通子图。
6)顶点的度(degree)是关联与该顶点的边的条数;入度(in-degree)定义为 箭头指向v的边数;出度(out-degree)相反;
7) 边(edge)带权值(weight)的图成为网络(network)。
二、图的存储(之后要写几个示例,这里用文字简单说说)
(1)邻接矩阵 (2)邻接表(适合稀疏图)(3)逆邻接表(方便求顶点的度)(4)邻接多重表(方便找到第二顶点和标记扫过的边)
三、图的连通性
1、连通
在无向图G中,v0 与 v1 之间存在一条路径,称v0 与 v1 是连通的;G为无向图,所以必然存在一条v0到v1的路径;当任意两个节点vi 与 vj之间都存在一条路径,则称无向图G是连通的。
2、连通分支
在无向图G中,一个极大连通子图则称为无向图G的连通子图。
3、强连通
在有向图G中,任意两个节点vi与 vj之间 可以任意到达(vi -> vj 或 vj ->vi)则称该有向图G是强连通的。
4、强连通分支
强连通分支时有向图的极大强连通子图。
5、关节点
在图G中,存在节点v ,当删除该节点以及关联在该节点上的所有边后,得到的图G’至少包含两个连通分支,那么该节点v 则成为图G 的关节点。
6、双连通图
双连通图是没有关节点的连通图。
7、双连通分支
在图G中一个最大的双连通子图。
8、求解图的双连通分支的思路
1)最大的双连通子图 -> 双连通图 -> 关节点
2)如果顶点v是深度优先生成树的根结点,且v至少有两个儿子,则v为关节点;如果v 不是生成树的根节点,那么当且仅当v有个儿子w,使得low(w)>= dfn(v),则v为关节点。
注释:
dfn(v):深度优先编号,在深度优先搜索过程中被访问的顺序。
low(v):从v 出发,经过一条由w形成的路径 和 一条回退边所能到达的具有最小深度优先编号的 顶点的编号。(说白了就是,他儿子节点能回到的最小深度优先编号,如果比他大,说明该点是关键点)
相关文章推荐
- Dijkstra 算法——计算有权最短路径(边有权值)
- 树、森林及二叉树的相互转换 – 数据结构和算法50
- 十大常用数据结构
- 数据结构(Java)——查找和排序(2)
- 数据结构系列——堆
- 数据结构-题目
- 大话数据结构小结1
- Objective-C 语法之常用数据结构
- 数据结构(Java)——查找和排序(1)
- 数据结构的栈和堆
- 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)
- Redis数据结构详解之List(二)
- 温故知新--数据结构的查询与排序
- 【郝斌数据结构自学笔记】24_链表创建和链表遍历算法的演示
- ffmpeg 基本数据结构和对象(一): AVPacket、AVPicture、AVFrame
- 深入浅出Linux之内核数据结构
- Linux常用的数据结构
- 【郝斌数据结构自学笔记】16-23_链表的定义与分类_链表节点插入与删除_每一个链表节点的数据类型该如何表示的问题
- 【FOJ2207 11月月赛C】【DFS栈性质应用 离线处理】以撒的结合 从x到y路径上的第k个点 询问众多
- 数据结构(Java)——递归