You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求实现无指针的邻接矩阵图深度优先搜索(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:55:11