c语言邻接表的深度优先遍历
时间: 2023-08-14 08:09:52 浏览: 85
c语言实现的邻接表连通图深度优先遍历
3星 · 编辑精心推荐
邻接表是一种表示图的方式,深度优先遍历是一种图的遍历方式。
邻接表的深度优先遍历可以通过递归实现,具体步骤如下:
1. 定义一个数组 visited[],记录每个节点是否被访问过,初始值为 false。
2. 从某一个未被访问过的节点开始递归遍历,遍历过程中,将该节点标记为已访问。
3. 对该节点的邻居节点进行遍历,如果邻居节点未被访问,则递归遍历邻居节点。
以下是 C 语言的代码实现:
```c
#include<stdio.h>
#define MAXN 1000
#define INF 0x3f3f3f3f
typedef struct node{
int v;
int w;
struct node *next;
}EdgeNode;
typedef struct {
EdgeNode *firstedge;
}VertexNode;
VertexNode adjlist[MAXN];
int visited[MAXN];
void add_edge(int u, int v, int w) {
EdgeNode *p = (EdgeNode *)malloc(sizeof(EdgeNode));
p->v = v;
p->w = w;
p->next = adjlist[u].firstedge;
adjlist[u].firstedge = p;
}
void dfs(int u) {
visited[u] = 1;
printf("%d ", u);
EdgeNode *p = adjlist[u].firstedge;
while(p != NULL) {
int v = p->v;
if(!visited[v]) {
dfs(v);
}
p = p->next;
}
}
int main() {
int n, m, u, v, w;
scanf("%d%d", &n, &m);
for(int i=1; i<=m; i++) {
scanf("%d%d%d", &u, &v, &w);
add_edge(u, v, w);
add_edge(v, u, w);
}
dfs(1);
return 0;
}
```
其中,add_edge() 函数用于添加边,dfs() 函数用于递归遍历节点,main() 函数中读入图的信息,并从第一个节点开始深度优先遍历。
阅读全文