- 1、本文档共80页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)