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:
Example 2:
Note:
N is in range [1,200].
M[i][i] = 1 for all students.
If M[i][j] = 1, then M[j][i] = 1.
解法1: DFS
这里因为已经有一个矩阵代表了graph连接的情况,所以我们不需要另外建图了。
对于每一个node,dfs一下把所有连通的地方都设为visited。
在外面循环的时候,每次看到一个没有被visited过得就是一个新的group
解法2: Union Find
比较典型的Union Find解法。
|
|