基于邻接矩阵的有向图的深度优先遍历c++代码
时间: 2023-06-10 14:08:53 浏览: 107
C++邻接矩阵的深度、广度优先遍历
5星 · 资源好评率100%
以下是基于邻接矩阵的有向图的深度优先遍历的 C 代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
int adj_matrix[MAX_VERTICES][MAX_VERTICES];
bool visited[MAX_VERTICES];
void dfs(int v, int n) {
visited[v] = true;
printf("%d ", v);
for (int i = 0; i < n; i++) {
if (adj_matrix[v][i] == 1 && !visited[i]) {
dfs(i, n);
}
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
// Initialize the adjacency matrix
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
adj_matrix[i][j] = 0;
}
}
// Build the adjacency matrix
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d %d", &u, &v);
adj_matrix[u][v] = 1;
}
// Perform DFS
for (int i = 0; i < n; i++) {
visited[i] = false;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
dfs(i, n);
}
}
}
```
其中,`adj_matrix` 是邻接矩阵,`visited` 用于记录每个节点是否被访问过。`dfs` 函数进行深度优先遍历,从节点 `v` 开始访问,递归地访问其未访问过的邻居节点。在 `main` 函数中,先读入节点数 `n` 和边数 `m`,然后读入每条边的起点和终点,构建邻接矩阵。最后,对于每个未访问的节点,从该节点开始进行深度优先遍历。
阅读全文