有N个同学,他们之间有些是朋友,有些不是。“友谊”是可以传递的,例如A和B是朋友,B和C是朋友,那么A与C也是朋友;朋友圈就是完成“友谊”传递后的一组朋友。给定N*N的矩阵代表同学间是否是朋友,如果M[i][j]=1代表第i个学生与第j个学生是朋友,否则不是。求朋友圈的个数。
例如:
Input:
[[1,1,0],
[1,1,0],
[0,0,1]]
Output:2
Input:
[[1,1,0],
[1,1,1],
[0,1,1]]
Output:1
#include <vector>
void DFS_graph(int u, std::vector<std::vector<int>>& graph, std::vector<int>& visit)
{
visit[u] = 1;
for (int i = 0; i < graph[u].size(); i++)
{
if (visit[i]==0&&graph[u][i]==1)
{
DFS_graph(i, graph, visit);
}
}
}
class Solution
{
public:
int findCircleNum(std::vector<std::vector<int>>& M)
{
std::vector<int> visit(M.size(),0);
int count = 0;
for (int i = 0; i < M.size(); i++)
{
if (visit[i]==0)
{
DFS_graph(i,M,visit);
count++;
}
}
return count;
}
};
int main()
{
int test[][3] = { {1,1,0},{1,1,0},{0,0,1} };
std::vector<std::vector<int>> M(3, std::vector<int>(3, 0));
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
M[i][j] = test[i][j];
}
}
Solution solve;
printf("%d\n",solve.findCircleNum(M));
return 0;
}
运行结果为:
2