用c语言写出深度优先遍历代码
时间: 2024-12-17 11:35:34 浏览: 14
图的深度、广度优先遍历(c语言).rar
5星 · 资源好评率100%
深度优先遍历(Depth-First Search,DFS)是一种用于图或树结构中节点搜索的经典算法。在C语言中,我们可以用递归的方式来实现这个过程。假设我们有一个邻接表表示的图,这里给出一个基本的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 图节点结构体
typedef struct Node {
int data;
struct Node* next; // 邻接节点指针
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
exit(0);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 添加边到节点
void addEdge(Node** head, int src, int dest) {
Node* newNode = createNode(dest);
newNode->next = (*head)->next;
(*head)->next = newNode;
}
// 深度优先遍历函数
void DFS(Node* root, int visited[]) {
if (root != NULL) {
visited[root->data] = 1; // 标记已访问
printf("%d ", root->data); // 输出当前节点
Node* temp = root->next;
while (temp != NULL) {
if (visited[temp->data] == 0) {
DFS(temp, visited); // 递归遍历未访问的子节点
}
temp = temp->next;
}
}
}
int main() {
// 初始化图数据
Node* head = NULL;
// ... 这里添加边 ...
int V = ...; // 图的顶点数
int* visited = (int*)malloc(V * sizeof(int)); // 记录已访问节点
for (int i = 0; i < V; i++) {
visited[i] = 0; // 初始状态为未访问
}
DFS(head, visited);
free(visited);
return 0;
}
```
阅读全文