数据结构-图

数据结构-图

1. 定义:

图是一种由节点(或称为顶点)和连接这些节点的边组成的数据结构。图可以用来表示任何二元关系,比如路线、网络、状态转换等。
在 Python 中,可以使用邻接表或邻接矩阵来表示图

class Graph:
    def __init__(self):
        self.graph = {}

2. 类型:

图分为有向图和无向图。在无向图中,边没有方向;在有向图中,边有明确的方向。此外,图可以是加权的(边有权值)或非加权的。

3. 术语:

关键术语包括邻接(两个节点由一条边直接连接)、路径(节点序列,其中每对相邻节点都由边连接)、环(路径的起点和终点是同一节点)、连通(如果图中任意两节点间都存在路径,则称该图为连通图)。

4. 表示方法:

图可以通过多种方式表示,包括邻接矩阵(一个二维数组,表示节点间的连接情况)和邻接表(列表或链表,表示每个节点的邻接节点)。

  • 邻接矩阵表示图:
class Graph:
    def __init__(self, num_vertices):
        self.num_vertices = num_vertices
        self.graph = [[0] * num_vertices for _ in range(num_vertices)]

    def add_edge(self, u, v):
        self.graph[u][v] = 1

    def print_graph(self):
        for row in self.graph:
            print(" ".join(map(str, row)))

# 示例用法
g = Graph(4)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(2, 3)
g.add_edge(3, 3)
g.print_graph()

  • 邻接表表示图:
class Graph:
    def __init__(self):
        self.graph = {}

    def add_edge(self, u, v):
        if u not in self.graph:
            self.graph[u] = []
        self.graph[u].append(v)

    def print_graph(self):
        for node in self.graph:
            print(node, "->", " -> ".join(map(str, self.graph[node])))

# 示例用法
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(2, 3)
g.add_edge(3, 3)
g.print_graph()

5. 应用:

图广泛应用于计算机科学和相关领域,例如在网络分析、社交网络、路径寻找(如GPS导航)、资源网络分析等领域。

posted @ 2024-04-13 16:55  Rescal_子轩  阅读(6)  评论(0编辑  收藏  举报