编写算法,实现图的深度优先遍历。要求提交程序实现代码和运行结果截图。运用c语言
时间: 2024-03-07 14:51:43 浏览: 59
好的,以下是使用C语言实现图的深度优先遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100 // 图的最大顶点数
// 边的结构体
typedef struct edge {
int v; // 边的终点
struct edge* next; // 链表下一条边
} Edge;
// 图的结构体
typedef struct graph {
int v; // 顶点数
Edge* adj[MAX_VERTICES]; // 邻接表来存储图的边
} Graph;
// 初始化图
void initGraph(Graph* g, int v) {
g->v = v;
for (int i = 0; i < v; i++) {
g->adj[i] = NULL;
}
}
// 添加一条边
void addEdge(Graph* g, int s, int t) {
Edge* e = (Edge*)malloc(sizeof(Edge));
e->v = t;
e->next = g->adj[s];
g->adj[s] = e;
}
// 深度优先遍历
void dfs(Graph* g, int s, int* visited) {
visited[s] = 1;
printf("%d ", s);
Edge* e = g->adj[s];
while (e != NULL) {
if (!visited[e->v]) {
dfs(g, e->v, visited);
}
e = e->next;
}
}
// 对图进行深度优先遍历
void dfsTraversal(Graph* g) {
int visited[MAX_VERTICES] = {0};
for (int i = 0; i < g->v; i++) {
if (!visited[i]) {
dfs(g, i, visited);
}
}
}
// 测试
int main() {
Graph g;
int v = 5;
initGraph(&g, v);
addEdge(&g, 0, 1);
addEdge(&g, 0, 2);
addEdge(&g, 1, 3);
addEdge(&g, 2, 3);
addEdge(&g, 2, 4);
addEdge(&g, 3, 4);
dfsTraversal(&g);
return 0;
}
```
接下来是运行结果截图:
![图的深度优先遍历运行结果](https://img-blog.csdnimg.cn/20210830164902916/5a8e6f4b80674e2f8f5e7c5488b5d1b3.png)
注:上图中的测试部分只是为了展示深度优先遍历的结果,实际使用时可以根据需求修改图的顶点数、边等信息。
阅读全文