判断连通分量个数dfs
#include<iostream>
#include<algorithm>
using namespace std;
int visit[1010],n,a[1010][1010];//条件重置
void dfs(int node){
visit[node]=1;
for(int i=1;i<=n;i++){
if(visit[i]==0&&a[node][i]==1){
visit[i]=1;
dfs(i);
}
}
}
int main(){
int m,k,ll,rr,temp,cnt;
cin>>n>>m>>k;
for(int i=0;i<m;i++){
cin>>ll>>rr;
a[ll][rr]=a[rr][ll]=1;
}
for(int i=0;i<k;i++){
cin>>temp;
fill(visit,visit+1010,0);
cnt=0;
visit[temp ]=1;
for(int i=1;i<=n;i++){
if(visit[i]==0){
dfs(i);
cnt++;
}
}
printf("%d\n",cnt-1);//连通分量数-1为最小边数
}
return 0;
}
总结:1.思路从没访问过的点出发,dfs,访问过标记,每dfs成功一次,cnt++,即连通分量个数
2.1000多点的以下的无向图最好使用邻接矩阵法
3.不想访问某个点或从某个点出发的所有边直接将他标记一下即可结合对这的判断 不需要在地图上删去什么
英语:
问题
dfs 纵向无