C语言有向图遍历及插入节点代码
时间: 2023-09-30 11:12:30 浏览: 45
好的以下是C语言的有向图遍历及插入节点的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图的最大节点数
#define MAX_NODE 10
// 定义邻接矩阵
int graph[MAX_NODE][MAX_NODE];
// 定义节点结构体
typedef struct Node {
int val;
struct Node* next;
}Node;
// 定义节点数组
Node* node_array[MAX_NODE];
// 初始化图
void init_graph() {
int i, j;
for (i = 0; i < MAX_NODE; i++) {
for (j = 0; j < MAX_NODE; j++) {
graph[i][j] = 0;
}
}
}
// 插入节点
void insert_node(int index, int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->val = value;
node->next = NULL;
if (node_array[index] == NULL) {
node_array[index] = node;
}
else {
Node* p = node_array[index];
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
}
// 初始化节点数组
void init_node_array() {
int i;
for (i = 0; i < MAX_NODE; i++) {
node_array[i] = NULL;
}
}
// 有向图深度优先遍历
void dfs(int cur) {
printf("%d ", cur);
Node* node = node_array[cur];
while (node != NULL) {
int index = node->val;
if (graph[cur][index] == 1) {
dfs(index);
}
node = node->next;
}
}
int main() {
int n, m, i, j, index, value;
scanf("%d %d", &n, &m);
// 初始化图和节点数组
init_graph();
init_node_array();
// 插入边
for (i = 0; i < m; i++) {
scanf("%d %d", &index, &value);
graph[index][value] = 1;
insert_node(index, value);
}
// 有向图深度优先遍历
for (i = 0; i < n; i++) {
dfs(i);
}
return 0;
}
```
以上代码实现了有向图的深度优先遍历和插入节点功能。其中,有向图采用邻接矩阵来存储边的信息,节点采用链表来实现。