c++基于深度优先搜索,统计邻接矩阵存储图中的连通分量
时间: 2024-03-12 10:49:09 浏览: 62
图的存储与深度优先与广度优先遍历
类似于邻接表存储图的情况,可以使用深度优先搜索算法来统计邻接矩阵存储图中的连通分量。以下是C++代码示例:
```c++
#include <iostream>
using namespace std;
const int MAXN = 1005;
int graph[MAXN][MAXN]; // 邻接矩阵存储图
bool visited[MAXN]; // 记录每个节点是否被访问过
void dfs(int u, int n) {
visited[u] = true;
for (int v = 1; v <= n; v++) {
if (graph[u][v] && !visited[v])
dfs(v, n);
}
}
int countComponents(int n) {
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
cnt++;
dfs(i, n);
}
}
return cnt;
}
int main() {
int n, m;
cin >> n >> m; // n为节点数,m为边数
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
graph[u][v] = graph[v][u] = 1;
}
int ans = countComponents(n);
cout << "There are " << ans << " connected components." << endl;
return 0;
}
```
注意,此处同样为无向图,如果是有向图,则需要根据邻接矩阵的定义进行适当修改。
阅读全文