代码实现如下:
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int n,m;
const int maxSize = 1010;
int v[maxSize][maxSize];
bool visited[maxSize];
void DFS(int city[][maxSize],int node){
cout<<node<<" ";
visited[node] = true;
for(int i = 1;i <= n;i++){
if(!visited[i] && city[node][i] == 1)
{
DFS(city,i);
}
}
}
void BFS(int city[][maxSize],int node){
queue<int> que;
visited[node] = true;
que.push(node);
while(!que.empty()){
int j = que.front();
cout<<que.front()<<" ";
que.pop();
for(int i = 1;i <= n;i++){
if(visited[i] == false && city[j][i] == 1)
{
visited[i] = true;
que.push(i);
}
}
}
}
int main(){
cin>>n>>m;
int c1,c2;
for(int i = 1;i <= m;i++)
{
cin>>c1>>c2;
v[c1][c2] = v[c2][c1] = 1;
}
fill(visited,visited + maxSize,false);//全部清空为未访问
int cnt = 0;
for(int j = 1;j <= n;j++){
if(!visited[j]){
cnt++;
BFS(v,j);
}
}
cout<<"连通数数量为"<<cnt<<endl;
return 0;
}
输入数据:
5 3
1 3
1 2
4 5
运行结果: