leetcode第十六周解题总结--图
2017-06-27 00:17
239 查看
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.
题意解析: 求一个无向图中的连通分量。
解题思路: 从一个节点开始搜索,若还存在无法访问的节点,则加一个连通分量,并从该点继续进行搜索,一直进行,直到所有节点都被访问。
广度优先搜索BFS
class Solution { public: int findCircleNum(vector<vector<int>>& M) { int n = M.size(); vector<int> a(n); int count = 0; stack<int> g; g.push(0); a[0] = 1; while(g.size()!=0) { int i = g.top(); g.pop(); for(int j = 0; j < n; j++) { if(M[i][j] == 1 && a[j] != 1) { a[j] = 1; g.push(j); } } if(g.size() == 0){ count ++; for(int p = 0; p < n; p ++) { if(a[p] == 0) { g.push(p); a[p] = 1; break; } } } } return count; } };
深度优先搜索DFS
class Solution { public: int findCircleNum(vector<vector<int>>& M) { int n = M.size(); vector<int> a(n); int count = 0; for(int i = 0; i < n; i++) { if(a[i] == 0) { dfs(i,M,a); count ++; } } return count; } void dfs(int i,vector<vector<int>>& M, vector<int>& a){ a[i] = 1; for(int j = 0; j < a.size(); j++) { if(M[i][j] == 1 && a[j] == 0){ dfs(j,M,a); } } } };
相关文章推荐
- leetcode -- 解题总结--DP与DFS, 递归
- Leetcode解题思路总结(Medium)
- leetcode第十三周解题总结--动态规划(二)
- LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结
- leetcode第十八周解题总结-贪心算法
- Leetcode解题思想总结篇:双指针
- leetcode 第十六周解题报告
- leetcode第十一周解题总结(155,150,20)--栈
- Leetcode解题思路总结(Easy)
- leetcode第四周解题总结(9,21,2,24)
- leetcode第三周解题总结(5,7,66)
- leetcode第十二周解题总结--动态规划
- leetcode第八周解题总结
- Leetcode解题思路总结(Easy)
- leetcode第二周解题总结(3,8,65)
- leetcode第六周解题总结(98)
- leetcode第十五周解题总结--二分查找(二)
- leetcode第十周解题总结
- leetcode第十四周解题总结--二分查找
- leetcode第一周解题总结(1,28,125,151,167)