42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
|
|
#define MAX_VERTICES 5 // 图的最大顶点数
|
|
|
|
// 图的邻接矩阵表示
|
|
int graph[MAX_VERTICES][MAX_VERTICES] = {
|
|
{0, 1, 1, 0, 0},
|
|
{1, 0, 1, 1, 0},
|
|
{1, 1, 0, 0, 1},
|
|
{0, 1, 0, 0, 1},
|
|
{0, 0, 1, 1, 0}
|
|
};
|
|
|
|
bool visited[MAX_VERTICES]; // 访问标记数组,用来记录哪些节点已经被访问过
|
|
|
|
// 深度优先遍历 DFS 函数
|
|
void dfs(int v, int n) {
|
|
printf("%d ", v); // 输出当前节点
|
|
visited[v] = true; // 标记当前节点已访问
|
|
|
|
// 递归访问当前节点的所有未访问的邻接节点
|
|
for (int i = 0; i < n; i++) {
|
|
if (graph[v][i] == 1 && !visited[i]) { // 如果存在边且该邻接节点未被访问
|
|
dfs(i, n); // 递归调用,访问该邻接节点
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
int n = MAX_VERTICES; // 图的顶点数
|
|
for (int i = 0; i < n; i++) {
|
|
visited[i] = false; // 初始化访问标记数组,将所有节点标记为未访问
|
|
}
|
|
|
|
printf("深度优先遍历(DFS):\n");
|
|
dfs(0, n); // 从顶点 0 开始进行 DFS 遍历
|
|
printf("\n");
|
|
|
|
return 0;
|
|
}
|