Python实现图(Graph)算法
Python实现图(Graph)算法,可以使用邻接矩阵或邻接表来表示图数据。
邻接矩阵是一个二维数组,第i行第j列表示第i个节点和第j个节点是否相邻。邻接矩阵的缺点是浪费空间,当节点数量很大时,矩阵会变得非常大。
邻接表是一种链表结构,每个节点都有一个链表存储其相邻节点的信息。邻接表的优点是占用空间较小,但是在遍历图时需要花费更多时间。
下面给出一个使用邻接矩阵实现的有向图的类示例:
class Graph: def __init__(self, vertices): self.vertices = vertices self.graph = [[0] * vertices for i in range(vertices)] def add_edge(self, u, v): self.graph[u][v] = 1 def dfs(self, node): visited = [False] * self.vertices self.dfs_util(node, visited) def dfs_util(self, node, visited): visited[node] = True print(node, end=" ") for i in range(self.vertices): if self.graph[node][i] == 1 and not visited[i]: self.dfs_util(i, visited) def bfs(self, node): visited = [False] * self.vertices queue = [] visited[node] = True queue.append(node) while queue: node = queue.pop(0) print(node, end=" ") for i in range(self.vertices): if self.graph[node][i] == 1 and not visited[i]: visited[i] = True queue.append(i) g = Graph(5) g.add_edge(0, 1) g.add_edge(0, 4) g.add_edge(1, 2) g.add_edge(1, 3) g.add_edge(1, 4) g.add_edge(2, 3) g.add_edge(3, 4) print("Depth First Traversal") g.dfs(0) print("\nBreadth First Traversal") g.bfs(0)
运行结果为:
Depth First Traversal 0 1 2 3 4 Breadth First Traversal 0 1 4 2 3
该示例中,我们创建了一个具有5个节点的有向图,并添加了7条边。然后,我们使用深度优先搜索和广度优先搜索遍历了该图,并输出结果。
相关文章