数据结构图的算法的-毕业(学术)论文设计.docVIP

  • 8
  • 0
  • 约6.17万字
  • 约 49页
  • 2018-12-03 发布于广西
  • 举报

数据结构图的算法的-毕业(学术)论文设计.doc

f 图 图形结构是一种比树形结构更复杂的非线性结构。树形结构中的结点之间具有明显的层次关系,且每一层上的结点只能和上一层中的一个结点相关,但可能和下一层的多个结点相关。在图形结构中,任意两个结点之间都可能相关,即结点与结点之间的邻接关系可以是任意的。因此,图形结构可用来描述更加复杂的对象。 1 图的基本概念和存储结构 1.1 图的定义 图(Graph)是由非空的顶点集合V与描述顶点之间关系——边(或者弧)的集合E组成,其形式化定义为: G=(V, E) 如果图G中的每一条边都是没有方向的,则称G为无向图。无向图中边是图中顶点的无序偶对。无序偶对通常用圆括号“( )”表示。例如,顶点偶对(vi,vj)表示顶点vi和顶点vj相连的边,并且(vi,vj)与(vj,vi)表示同一条边。 如果图G中的每一条边都是有方向的,则称G为有向图。有向图中的边是图中顶点的有序偶对,有序偶对通常用尖括号“ ”表示。例如,顶点偶对vi,vj表示从顶点vi指向顶点vj的一条有向边;其中,顶点vi称为有向边vi,vj的起点,顶点vj称为有向边vi,vj的终点。有向边也称为弧;对弧vi,vj来说,vi为弧的起点,称为弧尾;vj为弧的终点,称为弧头。 图是一种复杂的数据结构,表现在不仅各顶点的度可以不同,而且顶点之间的逻辑关系也错综复杂。从图的定义可知:一个图的信息包括两个部分:图中顶点的信息以及描述顶点之间的关系——边或弧的信息。因此无论采取什么方法来建立图的存储结构,都要完整、准确地反映这两部分的信息。为适于用C语言描述,从本节起顶点序号由0开始,即图的顶点集的一般形式为:V={v0,v1,…,vn-1}。 下面介绍几种常用的图的存储结构。 1.2 邻接矩阵 所谓邻接矩阵存储结构,就是用一维数组存储图中顶点的信息,并用矩阵来表示图中各顶点之间的邻接关系。假定图G=(V, E)有n个顶点,即V={v0,v1,…,vn-1},则表示G中各顶点相邻关系需用一个n×n的矩阵,且矩阵元素为: 1 若(v 1 若(vi,vj)或vi,vj是E中的边 0 若(vi,vj)或vi,vj不是E中的边 A[i][j]= 若G是带权图(网),则邻接矩阵可定义为: w wij 若(vi,vj)或vi,vj是E中的边 0或∞ 若(vi,vj)或vi,vj不是E中的边 A[i][j]= 其中,wij表示(vi,vj)或vi,vj上的权值;∞则为计算机上所允许的大于所有边上权值的数值。无向图的邻接矩阵表示如图7-6所示。 图7-6 无向图及邻接矩阵表示 有向图的邻接矩阵表示如图7-7所示。 图7-7 有向图及邻接矩阵表示 带权图的邻接矩阵表示如图7-8所示。 图7-8 带权图及邻接矩阵表示 从图的邻接矩阵可以看出以下特点: (1)无向图(包括带权图)的邻接矩阵一定是一个按对角线对称的对称矩阵。因此,在具体存放邻接矩阵时只需存放上(或下)三角矩阵的元素即可。 (2)对于无向图,邻接矩阵的第i行或第i列的非零元素(或非∞元素)个数正好是第i个顶点的度D(vi)。 (3)对有向图,邻接矩阵的第i行非零元素(或非∞元素)的个数正好是第i个顶点的出度OD(vi),第i列非零元素(或非∞元素)的个数正好是第i个顶点的入度ID(vi)。 (4)用邻接矩阵存储图,很容易确定图中任意两个顶点之间是否有边相连;但是,要确定图中具体有多少条边,则必须按行、按列对每一个元素进行查找后方能确定,因此花费的时间代价较大,这也是用邻接矩阵存储图的局限性。 在采用邻接矩阵方式表示图时,除了用一个二维数组存储用于表示顶点相邻关系的邻接矩阵之外,还需要用一个一维数组存储顶点信息。这样,一个图在顺序存储结构下的类型定义为; typedef struct { char vertex[MaxNum]; /*顶点为字符型且顶点表的长度小于MaxNum*/ int edges[MaxNum][MaxNum]; /*边为整型且edges为邻接矩阵*/ } MGraph; /*MGraph为采用邻接矩阵存储的图类型*/ 建立一个无向图的邻接矩阵程序如下: #includestdio.h #includestdlib.h #define MAXSIZE 30 typedef struct { char vertex[MAXSIZE]; //顶点为字符型且顶点表的长度小于MAXSIZE int edges[MAXSIZE][MAXSIZE]; //边为整型且edges为邻接矩阵 }MGraph;

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档