数据结构(C语言版) 第7章 图.docVIP

  • 2
  • 0
  • 约2.27万字
  • 约 46页
  • 2019-06-14 发布于江西
  • 举报
第7章 图 1 逻辑结构 1.1 定义 G = (V, E) V是顶点集,E是顶点间二元关系的集合 内涵越小,外延越大 与树的区别: ①树有特殊的根结点; ②树的结点和关系能分成互不相交的若干子集 图的分类: 无向图 有向图 边:二元关系是无序的。 弧:二元关系是有序的。 (vi,vj):vi,vj互为邻接点 vi,vj:弧头vj、弧尾vi G1=(V1,E1) V1={v1,v2,v3,v4} E1={(v1,v2),(v1,v3), (v1,v4),(v2,v3), (v2,v4),(v3,v4)} G2=(V2,E2) V2={v1,v2,v3,v4} E2={v1,v2, v2,v1, v2,v3, v4,v3} 不予讨论的图: (总能转换为简单图) 1.2 基本操作 对整体的操作 (遍历) 深度遍历DFSTraverse、 广度遍历BFSTraverse 对顶点的操作 InsertVex、DeleteVex、GetVex、SetVex 对弧/边的操作 InsertArc、DeleteArc、GetArc、SetArc 1.3 常见应用 ①信息的组织:家庭照片管理…… ②运输问题:最短路径问题、最优乘车路线问题…… ③网络规划:小区设店问题、区域连通的规划问题…… ④进度组织:工程进度管理…… 1.4 概念 思路:考虑图的复杂应用,提供简化问题的思路。 1.4. 着眼点:存储结构的选择。 无向完全图 边数:n*(n-1)/2 有向完全图 弧数:n*(n-1) 稀疏图 边数≈顶点数 稠密图 边数≈顶点数2 带权图 边或顶点带权值 着眼点:图的分解。 子图 V(B)∈V(A),E(B)∈E(A),称图B是图A的子图。 1.4. 度 无向图中,依附于某顶点的边数 入度 有向图中,以某顶点为弧尾的弧数 出度 有向图中,以某顶点为弧头的弧数 度的应用:以下哪个图能够一笔画完成?为什么? 一笔画问题的本质:图结构中的边遍历问题。 应用领域:车间/厂房布置、行走路线的安排、交通设计… 1.4. 着眼点:顶点间的联系。 顶点间路径 Vi,……,Vj 顶点间连通 若从Vi到Vj有路径,称Vi到Vj是连通的。 路径长度 路径上边/弧的数目。 简单路径 路径中所有顶点各不相同。 回路 路径中,起点和终点是同一顶点。 简单回路 除起点和终点外,其余顶点各不相同。 1.4. 着眼点:将不连通图简化为连通图。 连通图 无向图中,任意二个顶点之间是连通的。 无向图的 连通分量 无向图的极大连通子图。 强连通图 有向图中,任意二个顶点之间存在来往路径。 有向图的 强连通分量 有向图的极大强连通子图。 1.4. 着眼点:将图简化为树。 无向图 生成树 连通无向图中,n个顶点和n-1条边,构成的连通子图。(原连通图的极小连通子图) 生成森林 不连通的无向图中,各连通分量的生成树的集合。 有向图 生成树 强连通有向图中,n个顶点和n-1条弧,构成的单向连通子图(vi、vj间存在一条路径)。 一个顶点入度为0,其余顶点入度为1。 生成森林 不强连通的有向图中,各有强连通分量的生成树的集合。 第7章 图 2 图的存储结构 存储结构应该包含: ①顶点的信息;②边/弧的信息;③权的信息。 2.1 邻接矩阵 2. 0, 1, 1, 0 1, 0, 0, 1 1, 0, 0, 1 0, 1, 1, 0 0, 4, 2, Inf 4, 0, Inf, 8 2, Inf, 0, 1 Inf, 8, 1, 0 0, 4, 2, Inf Inf, 0, Inf, 8 Inf, Inf, 0, Inf Inf, Inf, 1, 0 2. const double Inf=10000; struct Edge { int v1,v2; double weight; }; class Mgraph // 简化版,只存储了边/弧的信息。 { int m_N; vectorvectordouble *m_Es; public: MGraph(int n); ~MGraph(); void Append(vectorEdge es); void Output(); int Degree(int k); }; 空间复杂度:O(n*n)。 适合稠密图,当点多边少时,空间浪费多。 2. // 构造函数 MGraph::MGraph(int n) { m_N = n; m_Es=new vectorvectordouble (n,vectordouble(n,Inf)); for(int i=0; im_N; i++) (*m_

文档评论(0)

1亿VIP精品文档

相关文档