假设一个无向图是非连通的,采用邻接表作为存储结构,试设计一个算法,输出图中各连通分量的顶点序列。python实现
时间: 2023-12-03 21:45:44 浏览: 83
以下是Python实现,算法的基本思路是通过深度优先遍历(DFS)找出图中所有的连通分量,并将每个连通分量的顶点序列输出。
```python
from collections import defaultdict
class Graph:
def __init__(self):
self.graph = defaultdict(list)
def add_edge(self, u, v):
self.graph[u].append(v)
self.graph[v].append(u)
def DFS(self, v, visited, component):
visited[v] = True
component.append(v)
for i in self.graph[v]:
if visited[i] == False:
self.DFS(i, visited, component)
def connected_components(self):
visited = [False] * (max(self.graph) + 1)
components = []
for i in range(len(visited)):
if visited[i] == False:
component = []
self.DFS(i, visited, component)
components.append(component)
return components
# Example Usage
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(3, 4)
g.add_edge(4, 5)
print(g.connected_components()) # Output: [[0, 1, 2], [3, 4, 5]]
```
以上代码实现了一个无向图的类,其中包括添加边、深度优先遍历和查找连通分量等方法。通过调用 `connected_components` 方法,可以获得输入图的所有连通分量。
阅读全文