DFS遍历图
伪代码
俩函数。
判断图有几个连通分支?就是图的遍历,dfs完了就给他++
#include <iostream>
#include <cstdlib>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int N=102;
int n,m,temp1,temp2,v[N];
//vector<int> ljb;
vector<int> G[N];
//加一个记录是否被访问过的散列
bool h[N]={0};
//遍历一个联通快
void dfs(int t)
{
for(int i=0;i<G[t].size();i++)
{
//printf("%d%d",t,i);
if(!h[G[t][i]])
{h[G[t][i]]=1;dfs(G[t][i]);//顺序不能颠倒!!!否则无穷递归
}
}
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d %d",&temp1,&temp2);
G[temp1].push_back(temp2);
G[temp2].push_back(temp1);
}
int ans=0;
for(int i=0;i<n;i++)
{
if(!h[i])
{ dfs(i);ans++;
}
}
printf("%d",ans);
}