1. 简介

图结构也是一种非线性数据结构。生活中有很多图结构的例子,比如通信网络、交通网络、人际关系网络等都可以归结为图结构。图结构的每个节点可以互相关联,比树结构更加复杂

下图就是一个简单的图结构:

2. 相关概念

  • 1.有向图

  • 2. 无向图

  • 3. 顶点的度:连接顶点的边的数量称为该顶点的度。在有向图中又分为入度和出度。

  • 4. 邻接顶点:指一条边的两个顶点。在有向图中分为入边邻接顶点和出边邻接顶点。

  • 5. 无向完全图:每两个顶点之间就有一条边。

  • 6. 有向完全图:每两个顶点之间存在方向相反的两条边。对于一个N个节点的有向完全图,边数为N(N-1),是无向完全图的两倍。

  • 7. 子图:类似子集合,子图的顶点和边都是原图的。

  • 8. 路径:两个顶点之间的连线,可以有多条,每条长度可能不一样。路径又可以分为三种形式:

    • 简单路径:一条路径上的顶点不重复出现;

    • 环:路径的第一个顶点和最后一个顶点相同叫做环,有时也成回路;

    • 简单回路:路径的第一个顶点和最后一个顶点相同,其余顶点不重复的叫做简单回路。

  • 9. 连通、连通图和连通分量:

    • 如果两个顶点之间有路径,那么这两个顶点是连通的;

    • 无向图中任意两个顶点都是连通的,称为连通图;

    • 无向图中极大连通子图称为连通分量。

    连通图的连通分量有且仅有一个,就是它本身。

  • 10. 强连通图和强连通分量:

    • 如果两个顶点之间有路径,那么这两个顶点是连通的,注意,因为有向,有时可能是Vi -> Vj是连通的,Vj -> Vi不是连通的;

    • 如果有向图中任意两个顶点都是连通的,那么就是强连通图;

    • 有向图的最大强连通子图称为该图的强连通分量。

    强连通图的强连通分量有且仅有一个,就是它本身。

  • 11. 权:在边上表示的数值,这个数值就是该边的权。无向图中加入权值称为无向带权图,有向图中加入权值称为有向带权图。权在生活中可以表示交通图中道路的长度,人际关系中代表亲密度等。

  • 12. 网(network):即边上带有权值的图的另一个名称,网与实际应用更为贴切。

3. 图的存储

在实际应用中,通常使用数组来单独保存顶点信息,然后采用二维数组保存顶点之间的关系。这种保存顶点之间关系的数组称为邻接矩阵。

这张无向图的边就可以这样表示

边通过EdgeWeight二维数组表示,有边的话存1,没有的话存0。比如1和2之间的表可以表示为:

这个图的邻接矩阵:

0

1

1

0

1

1

0

0

1

0

1

0

0

0

1

0

1

0

0

1

1

0

1

1

0

因为是无向图,所以左下和右上是对称的,有向图就不是了。

4. 代码实例

接下来用一个代码实例来看下树的结构初始化,清空以及输出遍历操作:

Last updated

Was this helpful?