使用DFS求邻接表的连通块,要求使用C++
时间: 2023-07-11 22:05:30 浏览: 80
邻接表数据结构C++
3星 · 编辑精心推荐
好的,以下是使用DFS求邻接表的连通块的C++代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 1000;
int n, m; // n为节点数,m为边数
bool vis[MAXN]; // 标记数组,用于标记节点是否被访问过
vector<int> adj[MAXN]; // 邻接表存储图
// DFS遍历连通块
void dfs(int u) {
vis[u] = true; // 标记节点已经被访问过
for (int i = 0; i < adj[u].size(); i++) {
int v = adj[u][i];
if (!vis[v]) {
dfs(v);
}
}
}
// 求连通块数量
int countConnectedComponents() {
int cnt = 0; // 连通块数量
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
cnt++;
dfs(i);
}
}
return cnt;
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v); // 添加边
adj[v].push_back(u);
}
cout << countConnectedComponents() << endl;
return 0;
}
```
该代码中,我们使用vis数组来标记节点是否被访问过。在countConnectedComponents函数中,我们对每个未被访问过的节点进行DFS遍历,并将连通块数量加1,直到所有节点都被访问过为止。
阅读全文