写出c语言从某一定点开始的DFS算法, 定义如下 typedef struct { int **arc; int numVertexes; } MGraph;
时间: 2024-11-18 10:16:38 浏览: 14
typedef struct 用法详解和用法小结
5星 · 资源好评率100%
在C语言中,深度优先搜索(Depth First Search, DFS)通常用于遍历图的数据结构。对于给定的邻接矩阵表示的有向图(MGraph),我们可以编写如下的DFS函数。假设`visit`数组用于标记已访问节点,初始值设为0。
```c
#include <stdbool.h>
#include <stdio.h>
#define MAX_VERTEXES 100
// 标记已访问节点
bool visit[MAX_VERTEXES];
// 递归版DFS函数
void dfs(MGraph graph, int start, int v) {
visit[v] = true; // 标记当前节点已访问
printf("%d ", v); // 输出节点编号
// 遍历邻接矩阵中的所有邻居
for (int i = 0; i < graph.numVertexes; i++) {
if (graph.arc[v][i] != -1 && !visit[i]) { // 如果邻居未访问且存在边
dfs(graph, start, i); // 递归访问邻居
}
}
}
// 主函数
void dfsmain(MGraph graph, int start) {
if (start >= graph.numVertexes || start < 0) {
printf("Invalid starting vertex\n");
return;
}
// 初始化访问数组
for (int i = 0; i < MAX_VERTEXES; i++) {
visit[i] = false;
}
printf("DFS from vertex %d:\n", start);
dfs(graph, start, start);
printf("\n");
}
int main() {
MGraph myGraph; // 图的定义,arc部分需自行填充
dfsmain(myGraph, 0); // 调用DFS,起点为0
return 0;
}
```
在这个代码中,`dfsmain`函数接受一个`MGraph`实例和一个起始节点作为输入,然后开始进行DFS。注意这里的邻接矩阵`arc`需要预先初始化,`arc[v][i]`存储的是从顶点`v`到顶点`i`的边是否存在。如果你想要从特定点开始,只需替换`dfsmain`中的起始节点即可。
阅读全文