547. Friend Circles

题目:

There are N students in a class. Some of them are friends, while some are not. Their friendship is transitive in nature. For example, if A is a direct friend of B, and B is a direct friend of C, then A is an indirect friend of C. And we defined a friend circle is a group of students who are direct or indirect friends.

Given a N*N matrix M representing the friend relationship between students in the class. If M[i][j] = 1, then the ith and jth students are direct friends with each other, otherwise not. And you have to output the total number of friend circles among all the students.
Example 1:

Input: 
[[1,1,0],
 [1,1,0],
 [0,0,1]]
Output: 2
Explanation:The 0th and 1st students are direct friends, so they are in a friend circle. 
The 2nd student himself is in a friend circle. So return 2

思路:

1.这题的知识点其实是Union-Find,我只用了DFS的方法写了,二刷的时候还要看Union-Find的方法去解。

Python

class Solution(object):
    def findCircleNum(self, M):
        """
        :type M: List[List[int]]
        :rtype: int
        """
        count = 0
        visited = [0] * len(M)
        for i in xrange(len(M)):
            if not visited[i]:
                visited[i] = 1
                self.dfs(M, visited, i)
                count += 1
        return count
        
    def dfs(self, M, visited, i):
        for j in xrange(len(M)):
            if M[i][j] and not visited[j]:
                visited[j] = 1
                self.dfs(M, visited, j)

你可能感兴趣的:(547. Friend Circles)