对于无向图求连通域的个数,一般来说有两种方法:1、深度优先搜索2、并查集
例如:朋友圈问题,有5个人,五个人关系为0认识1,1认识2,3认识1,4谁也不认识[0,1][1,2][3,1],直接或间接有联系的人组成一个朋友圈,求5个人中朋友圈的个数。这种类型的题目在最近的笔试中频繁出现。现总结一下解题方法如下。
①建立邻接表来存储[0,1][1,2][3,1]具体方法可以是利用键值对存储边,再转换为邻接表。
声明长度为n的二位vector为邻接表,vector<vector<int ,int>> g(n);
②申请bool型一维数组V,并初始化为false
③遍历邻接表各行,并判断v[i]是否为false(false表示未处理过),若为false,res++,并调用dfs(g,v,i)
④进行深度优先搜索,这个地方需要注意进行递归时i的值为g[i][j]。