547. Friend Circles

画成关系图就可以看出来,是连通图的遍历问题,BFS 和 DFS 都可以解,先用 BFS 写

class Solution:
    def findCircleNum(self, M: List[List[int]]) -> int:
        circle = 0
        visited = set()
        for i in range(len(M)):
            if i not in visited:
                visited.add(i)
                # 直接++cirle,因为学生至少在一个朋友圈里(自己)
                circle += 1
                queue = collections.deque([i])
                while queue:
                    friend = queue.popleft()
                    # 其实就是在遍历i学生的朋友关系
                    for n, j in enumerate(M[friend]):
                        if n not in visited and j == 1:
                            # 是他朋友的就加进visited,不用再去计circle了
                            visited.add(n)
                            # 加进queue,去访问 indirect friends
                            queue.append(n)
        return circle

Last updated

Was this helpful?