图及其应用一).ppt

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图及其应用一)

图及其应用 ; 一、 图的基本概念 1、图的的定义 图是由顶点V的集合和边E的集合组成的二元组: 记G=(V,E) ;2、无向图和有向图 ? ⑴无向图: 在图G=(V,E)中,如果对于任意的a,b∈V,当(a,b)∈E时,必有(b,a)∈E(即关系R对称),对称图为无向图。 在一无向图中用不带箭头的边连接两个有关联的顶点。 V={V1,V2,V3,V4,V5} ?E={(V1,V2),(V2,V3),(V3,V4),(V4,V5),(V5,V1),(V2,V5),(V4,V1)} ;⑵有向图: 如果对于任意的a,b∈V,当(a,b)∈E时 ,(b,a)∈E未必成立,则称此图为有向图。 在有向图中,通常用带箭头的边连接两个有关联的结点。 V={V1,V2,V3,V4} E={V1,V2,V2,V4,V1,V3,V3,V4,V4,V1} ;顶点的度: 无向图:与顶点关联的边的数目。 有向图:等于该顶点的入度与出度之和。 入度——以该顶点为终点的边的数目和 出度——以该顶点为起点的边的数目和 ?度数为奇数的顶点叫做奇点,度数为偶数的点叫做偶点。 ; 练习题: 1. 假设我们用d=(a1,a2,...,a5),表示无向图G的5个顶点的度数,下面给出的哪(些)组d 值合理( )。 A){5,4,4,3,1} B){4,2,2,1,1} C){3,3,3,2,2} D){5,4,3,2,1} E){2,2,2,2,2} 2.无向图G有16条边,有3个4度顶点、4个3度顶点,其余顶点的度均小于3,则G至少_______个顶点。 ;4、?? 路径和连通集 在图G=(V,E)中,如果对于结点a,b,存在满足下述条件的结点序列x1……xk(k1) ⑴ x1=a,xk=b ⑵ (xi,xi+1)∈E i=1‥k-1 则称结点序列x1=a,x2,…,xk=b为结点a到结点b的一条路径,而路径上边的数目k-1(或者沿路径各边权值之和)称为该路径的长度,并称结点集合{x1,…,xk}为连通集。;5、简单路径和回路 如果一条路径上的结点除起点x1和终点xk可以相同外,其它结点均不相同,则称此路径为一条简单路径。图(a)中v1→v2→v3是一条简单路径,v1→v3→v4→v1→v3不是简单路径。 x1=xk的简单路径称为回路(也称为环)。例如图(b)中,v1→v2→v1为一条回路。;例;二、图的存储结构(教材P79) 图的邻接矩阵表示法 邻接矩阵是表示结点间相邻关系的矩阵。若G=(V,E)是一个具有n个结点的图,则G的邻接矩阵是如下定义的二维数组a,其规模为n*n 1(或权值)?? 表示 顶点i和顶点j有边(i和j的路程) A[i][j] = ?????? ? 0(或∞) 表示顶点i和顶点j无边 ;上图中的图G1和图G2对应的相邻矩阵分别为: ;邻接矩阵的特点: 1)无向图的邻接矩阵是对称的,而有向图则不是。 2)邻接矩阵方便度数的计算。用邻接矩阵表示图: (1)容易判定任意两个结点之间是否有边相联; (2)容易求得各个结点的度数。 对于无权无向图的邻接矩阵,第i行元素值的和就是Vi的度数; 对于无权有向图的邻接矩阵,第i行元素值的和就是Vi的出度,第i列元素值的和就是Vi的入度; 对于有权无向图的邻接矩阵,第i行(或第i列)中元素值0的元素个数就是Vi的度数; 对于有权有向图的邻接矩阵,第i行中元素值0的元素个数就是Vi的出度;第i列元素值0的元素个数就是Vi的入度。 ;例;读入数据构造邻接矩阵(P80);const int MAXN = 201; //最大顶点数 int a[MAXN][MAXN], n, m, i, j, k, x; scanf(%d%d, n, m); for (i=1; i=m; i++) { //读入m条边 scanf(%d%d, j, k); a[j][k] = 1; //若是有向图,则只赋值a[j][k] a[k][j] = 1; //若是无向图,则一定要赋值a[k][j] } 如果是构造带权图,则上述for 语句中的代码改为: scanf(%d%d, j, k, x); a[j][k] = x; //若是有向图,则只赋值a[j][k] a[k][jl = x; //若是无向图,则一定要赋值a[k][j];邻接矩阵主对角线元素的处理;const int B

文档评论(0)

h0r3d7m + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档