ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

图结构

2022-01-17 21:00:23  阅读:184  来源: 互联网

标签:连通 vi vj 生成 顶点 TE 结构


介绍:

图是一种复杂的非线性结构,图型结构在每个节点中的元素关系是任意的,图G由两个集合V和E组成,定义G=(V,E),其中V是点的有限非空集合,E是由V的点表示的边的集合。

对于图G,可大致分成两种方式,如果每条边都有方向称为有向图,否则是无向图。

在无向图中存在一条边表示(vi,vj),称为边的两个端点,并称为邻接点,通常用n表示图中的结点数,用e表示图中边的数,不考虑结点到自身的边,任意结点都有边相连就称为完全无向图,在有向图中任意结点都有两个相反的边的称为完全有向图。

若在无向图中,顶点和顶点之间存在一条路径,如果路径长度处了顶点和终点为同一顶点外,其余顶点均不相同称为简单路径,若简单路径中起点和终点为同一顶点则称为回路或环。图中任意顶点之间存在路径,则称为连通图。无向图的极大连通子图称为连通分量。

在有向图中,对任意两个顶点之间互相有路径,则称为强连通图,有向图的极大连通子图称为强连通分量。

若在一个图的每条边上标上某种数字,称为边的全,边上带权的图称为带权图。

存储结构:

常用两种结构,邻接矩阵和邻接表。

邻接矩阵是表示图形顶点之间相邻关系的矩阵。设G=(V,E)是具有n个顶点的图,则G邻接矩阵定义n阶方阵:

A[i][j] = {1 若(vi,vj) 或 <vi,vj> 是G的边},{0 若(vi,vj)或<vi,vj> 不是G的边}

对于有向图,可以有两个矩阵,一个表示出边,另一个入边。由于无向图的邻接矩阵是对称的,可以采用压缩存储元素。

邻接表是图的一种链式存储结构。对于图中G中的每个顶点vi,把所有的邻接vi的顶点vj链接成一个单链表,称为vi的邻接表。

表中结点有两个域:其一为邻接点域(顶点),存储与vi关系的vj的值,其二,为指针域,存储下一个邻接结点。在每一个邻接顶点中存储一个顶点域和链表指针来读取图。

图的遍历:

  深度优先遍历类似树的前序遍历,假设图的所有顶点没有访问过,则从图的中的任意顶点为起始点,标记访问过得顶点,然后依次遍历每个邻接点,直到起始点相通的顶点都被访问,重复直到图中所有顶点都被访问。对图进行深度优先遍历时,按顶点的先后顺序访问的顶点称为图的深度优先遍历序列。

  广度优先搜索遍历,类似树的按层次遍历,通过图的层数来访问顶点,先被访问的顶点,其邻接点也被访问,符合队列先进先出。所以算法需要队列来记录被访问的顶点。

图的生成树和最小生成树:

在图的表示中,一般树定义为无回路的连通图,一个连通图的子图如果是包含所有顶点的树,称为生成树。生成树是连通图包含所有顶点的一个极小连通子图(边最少)。

最小生成树,采用不同的遍历算法生成不同的树,对于有权图把生成树各边的权值总和称为树的权,把权值最小的生成树称为最小生成树。

1.普里姆算法

   假设G=(V,G)是具有n个顶点的连通图,T=(U,TE)是G的最小生成树,其中U是T的顶点集,TE是T的边集,U和TE的初值为空。算法开始,首先从V中任取一个顶点,将它放入U中,此时U={v1}。然后U是V的真子集,知道那些端点在T中,另一端的顶点在T外的所有边中,找一条最短(权值最小)的边,假定为(vi,vj),其中vi 属于U,vj 属于V-U,把vi和vj的边加入TE,顶点加入U,如此反复,直到U=V,TE包含n-1边,T就是最小生成树。

2.克鲁斯卡尔算法

  假设G=(V,E)是一个具有n个顶点的连通图,T=(U,TE)是G的最小生成树,U的初值等于V,包含有G的全部顶点。T的初始状态包含n个顶点而无边的森林T=(V,Ø),将图G中的边按权值从小到大依次选取E中的边(u,v),若选取的边使生成树T不形成回路,则加入TE中,否则舍弃,如此进行直到TE中包含n-1边,此时T为最小生成树。

最短路径:

Dijkstra提出按路径长度递增的顺序产生顶点的最短路径算法,算法思想设有向图G=(V,E),其中V={1,2...n},cost表示G的邻接矩阵,cost[i][j]表示有向边<i,j>的权。若不存在<i,j>,则权为无穷大。设S是一个集合,其中每一个元素表示一个顶点,从源点到这些顶点的最短距离已经求出。设顶点v1是源点,集合S的初始只包含顶点v1。数组dist记录源点到其它顶点当前最短距离,其初值为dist[i]=cost[v1][i],i=2...,n。从S之外的顶点集合V-S选出一个顶点w,使dist[w]的值最小。从源点到达w只通过S中的顶点,把w加入集合S中并调整dist记录的从原点到V-S中每个顶点的距离,即从原来的dist[v]和dist[w]+cost[w][v]中选择较小的值作为新的dist[v]。重复过程,直到S中包含V中其余顶点的最短路径。

标签:连通,vi,vj,生成,顶点,TE,结构
来源: https://www.cnblogs.com/Python-233/p/15590780.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有