题目就不给了,大致给个思路
通常来说,这种题是用最小生成树,也就是用并查集和克鲁斯算法来求解的
既然有dfs的算法,那就试试看,通常来说dfs其实就是一种递归,基本上就是调用一个dfs 那就使得他同一种类型都遍历过了
所以在主函数部分,使用一个for循环,先判断这个有没有被遍历过(初始化都是被遍历过的)如果有那就加一,然后对他进行遍历
然后遍历之后,进行开始for循环
在dfs函数处
void dfs(int x){
//先把这个位置改成访问过了
visted[x]=true;
//然后开始判断
for(int i=0;i<n;i++){//n是顶点总数
if(!visted[i]&&)map[x][i])//也就是这个点没有被访问过,并且这个点和被选中的点有联系
dfs(i);//那就递归下去
}
}
在主函数处
int main(){
int c=0;//用来统计的
for(i=0;i<n;i++){
if(!visted[i]){
dfs(i);
c++
}
}
}