📜  数学 |图论基础 – 第 2 组(1)

📅  最后修改于: 2023-12-03 15:39:57.555000             🧑  作者: Mango

数学 | 图论基础 - 第 2 组

欢迎来到“数学 | 图论基础 - 第 2 组”!在这个小组中,我们将学习基本的图论概念、算法和应用。这里是一些内容示例:

图的基本概念

图由节点和边组成,我们可以用邻接矩阵或邻接表来表示图。节点之间的边可以是有向的或无向的,边上可以有权重。我们将讨论如何创建、遍历和搜索图。

图的遍历

遍历图是指按照一定的方式访问图中的所有节点。常用的两种遍历方式是深度优先搜索和广度优先搜索。我们将讨论它们的差异、实现和应用。

图的最短路径问题

给定有权重的图和两个节点,求它们之间的最短路径。我们将讨论 Dijkstra 算法和 Bellman-Ford 算法,它们分别适用于无负权边和带负权边的情况。

最小生成树问题

给定一个连通的、无向的带权图,求一个生成树,使得所有边权之和最小。我们将讨论 Kruskal 算法和 Prim 算法,它们都可以达到最优解。

以上只是一小部分内容示例。我们还将涉及诸如图的连通性、拓扑排序、欧拉回路、哈密顿回路等问题。我们会使用 Python,但内容基本上是独立于编程语言的。如果你对图论感兴趣,欢迎加入我们的学习小组!

"""
这是一个简单的示例,展示如何用邻接矩阵表示图。
"""

INF = float("inf")  # “无穷”
n = 5  # 节点数
# 假设这个图是无向的,边上有权重。
edges = [
    [0, 2, INF, 1, 4],
    [2, 0, 3, 2, INF],
    [INF, 3, 0, INF, INF],
    [1, 2, INF, 0, 2],
    [4, INF, INF, 2, 0],
]
# 打印这个邻接矩阵。
for row in edges:
    print(row)

在上面的示例中,我们用了邻接矩阵来表示一个五个节点的图,如下图所示:

     .----2----.
    / \       / \
   0   1---3---4

其中每个节点用一个数字表示,边上的数字表示该边的权重。因为这是一个无向图,所以邻接矩阵是对称的。INF 表示“无穷”(即没有边相连)。

参考资料