第四篇 群聚类非线性表的编程实验 第11章 应用图的遍历算法编程

11.1 BFS算法的实验范例

§6.1 概述 

         图

        图结构是描述和解决实际应用问题的一种基本而有力的工具。所谓的图(graph),可定义为G = (V, E)。其中,集合V中的元素称作顶点(vertex);集合E中的元素分别对应于V中的某一对顶点(u, v),表示它们之间存在某种关系,故亦称作边(edge) ①。一种直观显示图结构的方法是,用小圆圈或小方块代表顶点,用联接于其间的直线段或曲线弧表示对应的边。 从计算的需求出发,我们约定V和E均为有限集,通常将其规模分别记n = |V|和e = |E|。

       无向图、有向图及混合图

       若边(u, v)所对应顶点u和v的次序无所谓,则称作无向边(undirected edge),例如表示同学关系的边。反之若u和v不对等,则称(u, v)为有向边(directed edge),例如描述企业与银行之间的借贷关系,或者程序之间的相互调用关系的边。

在某些文献中,顶点也称作节点(node),边亦称作弧(arc),本章则统一称作顶点和边。

       如此,无向边(u, v)也可记作(v, u),而有向的(u, v)和(v, u)则不可混淆。这里约定,有向边(u, v)从u指向v,其中u称作该边的起点(origin)或尾顶点(tail),而v称作该边的终点(destination)或头顶点(head)。

        若E中各边均无方向,则G称作无向图(undirected graph,简称undigraph)。例如在描述影视演员相互合作关系的图G中,若演员u和v若曾经共同出演过至少一部影片,则在他(她) 们之间引入一条边(u, v)。反之,若E中只含有向边,则G称作有向图(directed graph,简称 digraph)。例如在C++类的派生关系图中,从顶点u指向顶点v的有向边,意味着类u派生自类v。特别地,若E同时包含无向边和有向边,则G称作混合图(mixed graph)。例如在北京市内交通图中,有些道路是双行的,另一些是单行的,对应地可分别描述为无向边和有向边。

§6.2 抽象数据类型

6.2.1 操作接口

       作为抽象数据类型,图支持的操作接口分为边和顶点两类,分列于表6.1和表6.2。

6.2.2 Graph模板类

      代码6.1以抽象模板类的形式,给出了图ADT的具体定义。

§6.3 邻接矩阵

6.3.1 原理

        邻接矩阵(adjacency matrix)是图ADT最基本的实现方式,使用方阵A[n][n]表示由n个顶点构成的图,其中每个单元,各自负责描述一对顶点之间可能存在的邻接关系,故此得名。

        对于无权图,存在 (不存在)从顶点u到v的边,当且仅当A[u][v] = 1(0)。图6.5(a)和(b)即为无向图和有向图的邻接矩阵实例。这一表示方式,不难推广至带权网络。此时如图(c)所示,矩阵各单元可从布尔型改为整型或浮点型,记录所对应边的权重。对于不存在的边,通常统一取值为∞或0。

猜你喜欢

转载自www.cnblogs.com/ZHONGZHENHUA/p/10500871.html