1 / 127

第 7 章 图

第 7 章 图. 概述. 图( Graph) 是一种复杂的非线性结构。在人工智能、工程、数学、物理、化学、生物和计算机科学等领域中,图结构有着广泛的应用。      本章先介绍图的概念,再介绍图的存储方法及有关图的算法。. 7.1 图的概念. 图的二元组定义 有向图和无向图. 图的二元组定义.

jera
Télécharger la présentation

第 7 章 图

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 图

  2. 概述 • 图(Graph)是一种复杂的非线性结构。在人工智能、工程、数学、物理、化学、生物和计算机科学等领域中,图结构有着广泛的应用。     本章先介绍图的概念,再介绍图的存储方法及有关图的算法。

  3. 7.1 图的概念 • 图的二元组定义 • 有向图和无向图

  4. 图的二元组定义 • 图G由两个集合V和E组成,记为:G=(V,E)其中:V是顶点的有穷非空集合,E是V中顶点偶对(称为边)的有穷集。     通常,也将图G的顶点集和边集分别记为V(G)和E(G)。E(G)可以是空集。若E(G)为空,则图G只有顶点而没有边。

  5. 1.有向图 • 若图G中的每条边都是有方向的,则称G为有向图(Digraph)。(1)有向边的表示     在有向图中,一条有向边是由两个顶点组成的有序对,有序对通常用尖括号表示。有向边也称为弧(Arc),边的始点称为弧尾(Tail),终点称为弧头(Head)。  【例】<vi,vj>表示一条有向边,vi是边的始点(起点),vj是边的终点。因此,<vi,vj>和<vj,vi>是两条不同的有向边。

  6. (2)有向图的表示 下面(a)图中G1是一个有向图。图中边的方向是用从始点指向终点的箭头表示的,该图的顶点集和边集分别为:V(G1)={v1,v2,v3}      E(G1)={<v1,v2>,<v2,v1>,<v2,v3>}

  7. 2.无向图 •      若图G中的每条边都是没有方向的,则称G为无向图(Undigraph)。(1)无向边的表示     无向图中的边均是顶点的无序对,无序对通常用圆括号表示。

  8. 示例 • 【例】下面(b)图中的G2和(c)图中的G3均是无向图,它们的顶点集和边集分别为:V(G2)={v1,v2,v3,v4}    E(G2)={(vl,v2),(v1,v3),(v1,v4),(v2,v3),(v2,v4),(v3,v4)}

  9. 无向图示例 •     V(G3)={v1,v2,v3,v4,v5,v6,v7}    E(G3)={(v1,v2),(vl,v3),(v2,v4),(v2,v5),(v3,v6),(v3,v7)}

  10. 注意: • 在以下讨论中,不考虑顶点到其自身的边。即若(v1,v2)或<vl,v2>是E(G)中的一条边,则要求v1≠v2。此外,不允许一条边在图中重复出现,即只讨论简单的图。

  11. 完全图 • 无向图的完全图:每二个顶点之间都有边相连:边数=n(n-1)/2,n为顶点个数 • 有向图的完全图:边数=n(n-1),n是顶点个数。

  12. 3.图G的顶点数n和边数e的关系 • (1)若G是无向图,则0≤e≤n(n-1)/2恰有n(n-1)/2条边的无向图称无向完全图(Undireet-ed Complete Graph)(2)若G是有向图,则0≤e≤n(n-1)。恰有n(n-1)条边的有向图称为有向完全图(Directed Complete Graph)。

  13. 图的边和顶点的关系

  14. 1.无向边和顶点关系 •  若(vi,vj)是一条无向边,则称顶点vi和vj互为邻接点(Adjacent),或称vi和vj相邻接;并称(vi,vj)依附或关联(Incident)于顶点vi和vj,或称(vi,vj)与顶点vi和vj相关联。【例】下图G2中:      ① 与顶点v1相邻接的顶点是v2,v3和v4      ② 关联于顶点v2的边是(v1,v2),(v2,v3)和(v2,v4)

  15. 2.有向边和顶点关系 • 若<vi,vj>是一条有向边,则称顶点vi邻接到vj,顶点vi邻接于顶点vj;并称边<vi,vj>关联于vi和vj或称<vi,vj>与顶点vi和vj相关联【例】在下图G1中,关联于顶点v2的弧是<v1,v2>,<v2,v1>和<v2,v3>。

  16. n个顶点的完全有向图,它的入度为多少?出度为多少?n(n-1)n个顶点的完全有向图,它的入度为多少?出度为多少?n(n-1)

  17. 3.顶点的度(Degree) • (1)无向图中顶点v的度(Degree)无向图中顶点v的度(Degree)是关联于该顶点的边的数目,记为D(v)。【例】上图G2中顶点v1的度为3

  18. 有向图的入度和出度 • (2)有向图顶点v的入度(InDegree)有向图中,以顶点v为终点的边的数目称为v的入度(Indegree),记为ID(v)。【例】上图G1中顶点v2的人度为l(3)有向图顶点v的出度(Outdegree)有向图中,以顶点v为始点的边的数目,称为v的出度(Outdegree),记为OD(v)【例】上图G1中顶点v2的出度为2

  19. 注意: •   ①有向图中,顶点v的度定义为该顶点的入度和出度之和,即D(v)=ID(v)+OD(v)。

  20. e与n之间的关系 • ②无论有向图还是无向图,顶点数n、边数e和度数之间有如下关系:

  21. 子图 • 设G=(V,E)是一个图,若V'是V的子集,E'是E的子集,且E'中的边所关联的顶点均在V'中,则G'=(V',E')也是一个图,并称其为G的子图(Subgraph)。

  22. 有向图的子图例子

  23. 无向图的子图例子

  24. 注意: • 设V'={v1,v2,v3},E'={(vl,v2),(v2,v4)},显然,V'属于V(G2),E'属于E(G2),但因为E'中序偶对(v2,v4)所关联的顶点v4不在V'中,所以(V',E')不是图,也就不可能是G2的子图。

  25. 路径 • 路径(Path)1.无向图的路径  在无向图G中,若存在一个顶点序列vp,vi1,vi2,…,vim,vq,使得(vp,vi1),(vi1,vi2),…,(vim,vq)均属于E(G),则称顶点vp到vq存在一条路径(Path)。 • 简单路径: • 2.有向图的路径     在有向图G中,路径也是有向的,它由E(G)中的有向边<vp,vi1>,<vi1,vi2>,…,<vim,vq>组成。3.路径长度     路径长度定义为该路径上边的数目。

  26. 5.简单回路或简单环(Cycle) • 起点和终点相同(vp=vq)的简单路径称为简单回路或简单环(Cycle)。【例】图G2中,顶点序列v1,v2,v4,v1是一个长度为3的简单环【例】有向图G1中,顶点序列v1,v2,v1是一长度为2的有向简单环。

  27. 6.有根图和图的根 • 在一个有向图中,若存在一个顶点v,从该顶点有路径可以到达图中其它所有顶点,则称此有向图为有根图,v称作图的根。

  28. 连通图和连通分量  

  29. 1.顶点间的连通性 • 在无向图G中,若从顶点vi到顶点vj有路径(当然从vj到vi也一定有路径),则称vi和vj是连通的。

  30. 2.连通图 • 若V(G)中任意两个不同的顶点vi和vj都连通(即有路径),则称G为连通图(Con-nected Graph)。【例】图G2,和G3是连通图。

  31. 3.连通分量 无向图G的极大连通子图称为G的连通分量(Connected Component)。注意:  ① 任何连通图的连通分量只有一个,即是其自身     ② 非连通的无向图有多个连通分量。  【例】下图中的G4是非连通图,它有两个连通分量H1和H2。

  32. 连通分量的例子

  33. 强连通图和强连通分量 • 1.强连通图     有向图G中,若对于V(G)中任意两个不同的顶点vi和vj,都存在从vi到vj以及从vj到vi的路径,则称G是强连通图。2.强连通分量     有向图的极大强连通子图称为G的强连通分量。注意:     ① 强连通图只有一个强连通分量,即是其自身。     ② 非强连通的有向图有多个强连分量。

  34. 例】下图中的G1不是强连通图,因为v3到v2没有路径,但它有两个强连通分量,如右图所示。例】下图中的G1不是强连通图,因为v3到v2没有路径,但它有两个强连通分量,如右图所示。

  35. 网络(Network) • 若将图的每条边都赋上一个权,则称这种带权图为网络(Network)。注意:权是表示两个顶点之间的距离、耗费等具有某种意义的数。【例】下图就是一个网络的例子。

  36. 网络例子

  37. 7.2图的存储结构 •  图的存储表示方法很多,这里介绍两种最常用的方法。至于具体选择哪一种表示法,主要取决于具体的应用和欲施加的操作。    为了适合用C语言描述,以下假定顶点序号从0开始,即图G的顶点集的一般形式是V(G)={v0,v1,…,Vn-1}。

  38. 图的邻接矩阵表示法 • 1.图的邻接矩阵表示法    在图的邻接矩阵表示法中: ① 用邻接矩阵表示顶点间的相邻关系 ② 用一个顺序表来存储顶点信息2.图的邻接矩阵(Adacency Matrix)设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵.

  39. • 例】下图中无向图G5和有向图G6的邻接矩阵分别为Al和A2。

  40. 无向图的邻接矩阵 • 是对称矩阵 • 每条边在矩阵中出现2次 • 每和之和和每列之和相等,和代表顶点的度 • 把矩阵的各元素求和/2,边数 • 一个优点. A[2][3]==0 • 缺点:插入一个顶点,删除一个顶点,比较麻烦

  41. 有向图的邻接矩阵 • 一般情况,它不是对称,如果有向图的邻接矩阵是对称的话?一个完全有向图。 • 每行之代表出度,每列之和代表入度。

  42. .网络的邻接矩 •      若G是网络,则邻接矩阵可定义为:

  43. 说明 • 其中:wij表示边上的权值;      ∞表示一个计算机允许的、大于所有边上权值的数。

  44. 4.图的邻接矩阵存储结构形式说明 • #define MaxVertexNum l00 //最大顶点数,应由用户定义typedef char VertexType; //顶点类型应由用户定义typedef int EdgeType; //边上的权值类型应由用户定义typedef struct{      VextexType vexs[MaxVertexNum]; //顶点表EdgeType edges[MaxVertexNum][MaxVertexNum];                    //邻接矩阵,可看作边表int n,e; //图中当前的顶点数和边数   }MGragh;

  45. 注意:      ① 在简单应用中,可直接用二维数组作为图的邻接矩阵(顶点表及顶点数等均可省略)。    ② 当邻接矩阵中的元素仅表示相应的边是否存在时,EdgeTyPe可定义为值为0和1的枚举类型。    ③ 无向图的邻接矩阵是对称矩阵,对规模特大的邻接矩阵可压缩存储。    ④ 邻接矩阵表示法的空间复杂度S(n)=0(n2)。

  46. 5.建立无向网络的算法。 void CreateMGraph(MGraph *G) {//建立无向网的邻接矩阵表示int i,j,k,w; scanf(“%d%d”,&G->n,&G->e); //输入顶点数和边数for(i=0;i<G->n;i++) //读人顶点信息,建立顶点表G->vexs[i]=getchar(); for(i=0;i<G->n;i++)        for(j=0;j<G->n;j++)           G->edges[i][j]=0; //邻接矩阵初始化for(k=0;k<G->e;k++) {//读入e条边,建立邻接矩阵scanf("%d%d%d",&i,&j,&w); //输入边(vi,vj)上的权w        G->edges[i][j]=w;        G->edges[j][i]=w;       }    }//CreateMGraph

  47. 思考题 • 有向图的邻接矩阵如何建立?

  48. 练习 • 如果用邻接矩阵表示有向图,写一个算法求各个顶点的入度和出度 • void GraphDegree(MGraph G, int Indegree[MaxVexNum],int OutDegree[MaxVexNum]) • { • }

  49. 图的邻接表表示法 • 图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。

More Related