写一个dfs遍历无向图的领接矩阵,输出其节点数与边数的c++代码
时间: 2024-09-22 21:08:26 浏览: 45
在C++中,你可以使用深度优先搜索(DFS)算法遍历无向图的邻接矩阵表示。这里是一个基本的示例,它首先计算节点数和边数,然后打印出来:
```cpp
#include <iostream>
using namespace std;
// 邻接矩阵表示图
const int V = 4; // 假设图有V个节点
int graph[V][V];
// 记录访问过的节点
bool visited[V];
void dfs(int node) {
// 标记当前节点已访问
visited[node] = true;
cout << "访问节点: " << node << endl;
// 遍历邻居并递归调用dfs
for (int i = 0; i < V; ++i)
if (graph[node][i] == 1 && !visited[i])
dfs(i);
}
int main() {
// 初始化邻接矩阵和设置边
// 这里仅做示例,你需要根据实际图结构填充
graph[0][1] = graph[1][0] = 1;
graph[0][2] = graph[2][0] = 1;
graph[2][3] = graph[3][2] = 1;
// 初始化所有节点未访问
memset(visited, false, sizeof visited);
// 初始化节点数为V,边数为0
int nodes = V;
int edges = 0;
// 对每个节点进行DFS,同时计数边的数量
for (int i = 0; i < V; ++i) {
if (!visited[i]) {
dfs(i);
edges += count(graph[i], graph[i] + V, 1); // 统计以i为起点的边数
}
}
cout << "节点数: " << nodes << endl;
cout << "边数: " << edges << endl;
return 0;
}
```
这个代码会打印出图的所有节点(不重复),以及每条边的总数。注意,`count(graph[i], graph[i] + V, 1)`函数用于计算从节点i出发的边数。
阅读全文