用c语言遍历一个有邻接矩阵的有向无环图
时间: 2024-05-09 20:19:41 浏览: 68
可以使用深度优先搜索(DFS)或广度优先搜索(BFS)遍历有向无环图。这里以DFS为例,具体实现如下:
1. 定义一个数组visited,用于记录节点是否被访问过,初始值为0(未访问)
2. 从任意一个未被访问的节点开始遍历,遍历过程中将该节点标记为已访问(visited[i] = 1),然后遍历该节点的所有后继节点,对于每个后继节点j,如果visited[j]为0,则递归访问该节点
3. 遍历结束后,visited数组中所有元素都为1,则遍历完成
下面是代码实现:
```c
#include <stdio.h>
#define MAXN 100 // 最大节点数
int n; // 节点数
int g[MAXN][MAXN]; // 邻接矩阵
int visited[MAXN]; // 记录节点是否被访问过
void dfs(int i) {
visited[i] = 1; // 标记节点i为已访问
printf("%d ", i); // 打印节点i
for (int j = 0; j < n; j++) {
if (g[i][j] && !visited[j]) { // 如果节点j是节点i的后继节点,并且节点j未被访问过,则递归访问节点j
dfs(j);
}
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &g[i][j]); // 输入邻接矩阵
}
}
for (int i = 0; i < n; i++) {
if (!visited[i]) { // 如果节点i未被访问过,则从节点i开始遍历
dfs(i);
}
}
return 0;
}
```
阅读全文