【普通人题解】给定邻接矩阵,求连通分量

题目

给定一个图的邻接矩阵,求出邻接矩阵的连通分量有多少个。

思路

寻找任意一个点,以任意记忆化的遍历方式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}.")
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值