在一个社交网络中,我们有一些好友关系,每个朋友是一个节点,节点之间可能存在双向好友关系。我们需要找出所有的朋友圈,并返回朋友圈的数量。

示例:

输入:[[1,2],[1,3],[0,1],[0,3],[0,4],[3,4]] 输出:3 解释:有三个朋友圈,分别是 [0,1,4]、[1,2,3] 和 [3,4] 。

解决方案:

这个问题可以使用深度优先搜索(DFS)来解决。我们可以遍历每个节点,并从该节点开始进行DFS,以找到所有与之相连的节点。每个访问过的节点都应该被标记为已访问,以避免重复计算。

以下是一个使用Python实现的DFS解决方案:

class Solution:
    def findCircleNum(self, M: List[List[int]]) -> int:
        n = len(M)
        visited = [False] * n
        def dfs(i):
            for j in range(n):
                if M[i][j] == 1 and not visited[j]:
                    visited[j] = True
                    dfs(j)
        
        count = 0
        for i in range(n):
            if not visited[i]:
                dfs(i)
                count += 1
        return count

扩展阅读:

图片:

friend_circle