"图的定义和术语-数据结构第七章图"
本文主要介绍了图这一数据结构的基本概念、术语以及相关的图算法。图是由顶点(数据元素)集合V和边(二元关系)集合E组成的,记作G=(V,E)。在图中,数据元素之间的关系是任意的,不同于线性表的线性关系和树的层次关系。
1. **图的类型**:
- **有向图**:边是有方向的,用弧来表示,如<u,v>表示从u到v的一条弧,u为弧尾,v为弧头。例如图7.1(a)展示了有向图的例子。
- **无向图**:边没有方向,u和v互为邻接点,边表示为(u,v),如图7.1(b)所示。
2. **特殊图**:
- **网络**:在网络图中,每条边或弧都有一个数值,即权重。
- **子图**:如果一个图G2的顶点和边都在另一个图G1中,那么G2是G1的子图。
3. **图的度**:
- **度**:无向图中,顶点的度是与其相连的边的数量。
- **入度**和**出度**:在有向图中,顶点的入度是其作为目标的弧数,出度是作为起点的弧数。顶点的度等于入度加出度。
- 边数的性质:所有顶点的度数之和等于边数的两倍。
4. **图的存储结构**:
- **邻接矩阵**:用二维数组表示图,矩阵的每个元素表示对应顶点间是否存在边。
- **邻接表**:为每个顶点创建一个链表,链表中存储与该顶点相邻的所有顶点。
5. **图的遍历**:
- **深度优先搜索(DFS)**:从一个顶点出发,尽可能深地搜索图的分支,直到访问所有可达顶点。
- **广度优先搜索(BFS)**:从一个顶点开始,按层次顺序访问所有顶点。
6. **生成树**:
- **最小生成树**:在带权图中找到一棵包括所有顶点的树,使得所有边的权重之和最小。
- Kruskal's算法和Prim's算法是求解最小生成树的常用方法。
7. **最短路径**:
- **Dijkstra算法**:用于找出带权图中源节点到其余所有节点的最短路径。
- **Floyd-Warshall算法**:可以找出图中任意两点间的最短路径。
8. **拓扑排序**:
- 对于无环有向图,可以进行拓扑排序,将顶点排成线性顺序,使得对于每条有向边(u,v),u总是在v之前。
这些基本概念和算法构成了图论的基础,广泛应用于各种实际问题,如交通网络规划、计算机网络、任务调度等。通过理解和掌握这些知识,可以解决复杂的关系结构和优化问题。