图在日常生活及科学技术领域都有着广泛的应用.ppt

图在日常生活及科学技术领域都有着广泛的应用.ppt

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

第七章图;图的概念;▲图的二元组的另一个定义:图由顶点集(vertexset)V(G)和边集(edgeset)E(G)所组成。

假设V(G)为空,那么E(G)也必然为空;假设V(G)非空,那么E(G)不一定非空。

▲有向图(directedgraph)----

指图G的边集E(G)中为有向边。

▲无向图(undirectedgraph)----

指图G的边集E(G)中为无向边。;V(G1)={0,1,2,3}

E(G1)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}

V(G2)={0,1,2,3,4,5,6}

E(G2)={(0,1),(0,2),(1,3),(1,4),(2,5),(2,6)}

V(G3)={0,1,2}E(G3)={0,1,1,0,1,2}

E(G4)={0,1,2,3}

V(G4)={0,1,1,0,0,2,2,0,0,3,3,0,1,2,2,1,1,3,3,1,2,3,3,2};;端点(endpoint)和邻接点(adjacent);顶点的度、入度、出度;假设一个图有n个顶点和e条边,那么该图所有顶点的度同边数e满足一下关系:

证明:∵每条边连接着两个顶点,

∴每个顶点的度数分别加1,总和加2,

∴全部顶点的度数为所有边数的2倍。;完全图、稠密图、稀疏图;子图;路径和回路;路径长度----是指该路径上经过的边的数目。

简单路径----指一条路径上的所有顶点均不同。

复杂路径----指一条路径上的顶点有所重复。

回路(环cycle)----指一条路径上的前后两端点相同。;连通和连通分量;强连通图和强连通分量;权和网;图的存储结构;邻接矩阵(adjacencymatrix);next;对于带权图,邻接矩阵表示为;采用邻接矩阵表示图,便于查找图中任一边或边上的权,时间复杂度为O(1)。

例:查找边(i,j)或i,j,只要查A[i,j]是否为一个有效值(非零值或非MaxValue值)即可;假设为有效值那么边存在,否那么不存在。

也便于查找图中任意顶点的度,时间复杂度为O(n)。

例:在无向图中,统计第i行(列)有效元素个数可得顶点vi的度;在有向图中,统计第i行有效元素个数可得顶点vi的出度,统计第i列有效元素个数可得顶点vi的入度。;查找任一顶点的邻接点也同样方便,依次查找一个顶点所有邻接点(出边邻接点或入边邻接点)时间复杂度为O(n)。

例:查找vi的一个邻接点(无向图)或出边邻接点(有向图),只要在第i行上查找出一个有效元素,以该元素所在列号j为序号的???点vj就是所求。

空间复杂度:邻接矩阵存储需要占用n*n个整数存储位置表示顶点的相邻关系,还需要一个n个元素的一维数组存储顶点信息,空间复杂度为O(n2)。适合稠密图。;邻接矩阵的类型定义:

#defineMaxVertexNum8

#defineMaxEdgeNum20

#defineMaxValue1000

typedefintVertexType;

typedefVertexTypeVexlist[MaxVertexNum];

typedefintAdjmatrix[MaxVertexNum][MaxVertexNum];;算法7-1生成无向带权图顶点数组和邻接矩阵的算法p128-129

voidCreate1(VexlistGV,AdjmatrixGA,intn,inte)

{inti,j,k,w;

printf(“输入%d个顶点数据:〞,n);

for(i=0;in;i++)scanf(“%d〞,GV[i]);;for(i=0;in;i++)

for(j=0;jn;j++)

{if(i==j)GA[i][j]=0;

elseGA[i][j]=MaxValue;}

printf(“\n输入d条无向带权边:\n〞,e);

for(k=1;k=e;k++)

{scanf(“%d%d%d〞,i,j,w);

GA[i][j]=GA[j][i]=w;}

};邻接表(adjacencylist);无向图的vi邻接表的边结点数,等于vi的边数/邻接点数/度数;

有向图的vi邻接表的边结点数,等于vi的出边数/出边邻接点数/出度数。

边结点包含三个域:

▲邻接点域(adjvex):存储顶点vi的一个邻接顶点vj的序号j;

▲权域(weight):存储边(vi,vj)/vi,vj的权;(无权图不需要)

▲链域(next):用以链接下一个边结点;用一个n个元素

文档评论(0)

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

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

1亿VIP精品文档

相关文档