如何用C语言实现一个图的邻接矩阵表示并执行深度优先搜索(DFS)算法?
时间: 2024-10-24 11:07:34 浏览: 48
在C语言中,我们可以用二维数组来实现图的邻接矩阵表示,每个元素a[i][j]代表从顶点i到顶点j是否有边连接。如果存在,则a[i][j]=1或非零;反之,a[i][j]=0。
深度优先搜索(DFS)的实现步骤如下:
```c
#include <stdio.h>
#define V 4 // 图中的顶点数
// 邻接矩阵
int graph[V][V] = {
{0, 1, 0, 1},
{1, 0, 1, 1},
{0, 1, 0, 1},
{1, 1, 1, 0} // 例如,这是一个有向图示例
};
// 检查是否存在路径
int visited[V];
void dfs(int node) {
visited[node] = 1; // 标记当前节点已访问
printf("%d ", node); // 输出节点值
for (int i = 0; i < V; ++i)
if (graph[node][i] && !visited[i]) // 如果邻居未访问并且有边
dfs(i); // 递归访问邻居
}
// 主函数调用DFS
int main() {
int start = 0;
printf("Depth First Search from vertex %d: \n", start);
memset(visited, 0, sizeof(visited)); // 初始化所有节点为未访问
dfs(start); // 从起点开始搜索
return 0;
}
```
阅读全文