c语言,采用邻接矩阵表示图的深度优先遍历
时间: 2024-12-01 17:05:47 浏览: 84
图的邻接矩阵表示,深度优先遍历,广度优先遍历实现
在C语言中,使用邻接矩阵表示图是一种常见的数据结构选择,尤其对于稠密图(边的数量接近于顶点数量的平方)。邻接矩阵是一个二维数组,其中行代表源节点,列表示目标节点,每个元素值通常为1或0,1表示有边相连,0表示无连接。
深度优先搜索(Depth-First Search,DFS)算法在这种表示下可以这样实现:
1. 初始化:创建一个栈或递归栈,并将起始节点压入栈中。
2. 主循环:
a. 如果栈非空,取出栈顶节点作为当前节点。
b. 检查当前节点的所有相邻节点(邻接矩阵对应位置的节点),如果它们未访问过,则标记为已访问并压入栈。
3. 递归过程:
对于每个新压入栈的节点,会继续这个过程,直到遍历完所有路径,或者栈为空(表明没有更多的探索路径)。
以下是简单的C语言函数示例,假设`graph`是邻接矩阵,`visited`用于记录节点是否被访问过:
```c
void dfs(int graph[vertices][vertices], int src, int visited[]) {
visited[src] = 1; // 标记开始节点已访问
for (int i = 0; i < vertices; i++) {
if (graph[src][i] == 1 && !visited[i]) { // 如果边存在且没访问过
printf("%d ", i); // 访问节点
dfs(graph, i, visited); // 递归访问邻居
}
}
}
```
阅读全文