请求实现无指针的邻接矩阵图深度优先搜索(DFS)C语言代码
无指针版邻接矩阵DFS的C语言实现
完全基于数组实现,无任何指针操作,核心逻辑直观易懂,适合理解图的深度优先搜索本质:
#include <stdio.h> #define MAX_VERTICES 100 // 最大顶点数,可按需调整 // 邻接矩阵:adj[i][j] = 1 表示顶点i与j有边,0则无 int adj[MAX_VERTICES][MAX_VERTICES]; // 访问标记数组:visited[i] = 1 表示顶点i已被访问,0则未访问 int visited[MAX_VERTICES]; // 图的实际顶点数 int vertex_count; // 深度优先搜索函数,参数为当前遍历的顶点编号 void dfs(int current) { // 标记当前顶点为已访问 visited[current] = 1; // 输出当前顶点(可根据需求替换为其他业务操作) printf("访问顶点 %d\n", current); // 遍历所有顶点,查找与当前顶点相连且未被访问的顶点 for (int i = 0; i < vertex_count; i++) { if (adj[current][i] == 1 && visited[i] == 0) { dfs(i); } } } int main() { // 初始化邻接矩阵和访问数组 for (int i = 0; i < MAX_VERTICES; i++) { visited[i] = 0; for (int j = 0; j < MAX_VERTICES; j++) { adj[i][j] = 0; } } // 示例:构建一个无向图 vertex_count = 5; // 添加双向边:0-1, 0-2, 1-3, 2-4 adj[0][1] = 1; adj[1][0] = 1; adj[0][2] = 1; adj[2][0] = 1; adj[1][3] = 1; adj[3][1] = 1; adj[2][4] = 1; adj[4][2] = 1; // 从顶点0开始DFS printf("深度优先搜索结果:\n"); dfs(0); return 0; }
代码说明
- 邻接矩阵
adj用二维数组直接存储,无需指针动态分配,初始化时默认设为0(无边),可手动添加双向边(无向图)或单向边(有向图) visited一维数组记录顶点访问状态,彻底避免重复遍历问题- DFS函数通过递归实现,全程仅依赖数组索引操作,无任何指针语法,逻辑完全围绕数组展开
- 主函数内的示例图可按需修改,替换成自己需要的顶点数和边关系
运行结果示例
深度优先搜索结果: 访问顶点 0 访问顶点 1 访问顶点 3 访问顶点 2 访问顶点 4
内容的提问来源于stack exchange,提问作者A Work
相关产品推荐
相关产品推荐

