题目
给定一个图的邻接矩阵,求出邻接矩阵的连通分量有多少个。
思路
寻找任意一个点,以任意记忆化的遍历方式bfs/dfs访问到头,此时count+1.然后再找到下一个未被访问继续上述过程,直到所有节点都被访问到。
代码
adj=[
[0, 1, 1, 0, 0],
[1 ,0 ,1 ,0 ,0],
[1, 1, 0, 0, 0],
[0 ,0 ,0 ,0 ,1],
[0 ,0, 0, 1, 0],
]
# 记录是否被访问过。 如果还有没被访问的,那就继续dfs找
visited=[0 for _ in adj]
how_many=0
def dfs(i):
global how_many
# 第i个节点连接着谁?
for j in adj[i]:
# 与i个节点相连,且之前没被访问过,就继续dfs
if visited[j]==0:
visited[j]=1
dfs(j)
# 已经访问过这个连通分量所有的点了,记录+1
how_many+=1
return
# 从每一个点往里dfs,找他的连通分量
for i in range(len(adj)):
dfs(i)
print(f"连通分量个数:{how_many}.")