无向图深度优先求所有路径代码c语言
时间: 2023-08-12 19:16:22 浏览: 71
好的,以下是使用 C 语言实现的无向图深度优先遍历所有路径的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
int graph[MAX_N][MAX_N]; // 无向图的邻接矩阵表示
int visited[MAX_N]; // 记录节点是否已经访问过
int path[MAX_N]; // 记录当前路径
int path_len = 0; // 当前路径的长度
int n; // 图中节点的数量
// 深度优先遍历所有路径
void dfs_all_paths(int node) {
visited[node] = 1; // 标记当前节点为已访问
path[path_len++] = node; // 将当前节点加入路径中
if (node == n - 1) { // 如果当前节点是终止节点,则输出当前路径
for (int i = 0; i < path_len; i++) {
printf("%d ", path[i]);
}
printf("\n");
} else { // 否则继续遍历相邻节点
for (int i = 0; i < n; i++) {
if (graph[node][i] && !visited[i]) {
dfs_all_paths(i);
}
}
}
visited[node] = 0; // 回溯,标记当前节点为未访问
path_len--; // 回溯,将当前节点从路径中删除
}
int main() {
scanf("%d", &n);
// 读入无向图的邻接矩阵表示
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
dfs_all_paths(0); // 从起始节点开始遍历所有路径
return 0;
}
```
在这个代码中,我们使用了邻接矩阵来表示无向图,使用 visited 数组来记录每个节点是否已经被访问过,使用 path 数组来记录当前遍历的路径。在 dfs_all_paths 函数中,我们首先将当前节点标记为已访问,并将其加入路径中,然后判断当前节点是否为终止节点,如果是则输出当前路径,否则继续遍历相邻节点。遍历完相邻节点后,我们需要进行回溯操作,将当前节点标记为未访问并将其从路径中删除。最后,我们从起始节点开始遍历所有路径。
阅读全文