Lucifer...... 2024-03-15 09:27 采纳率: 83.3%
浏览 0
已结题

C语言数据结构图的遍历

求解,进行有向带权图(邻接矩阵)深度优先遍历代码运行时遇到报错无法解决,求大家帮忙😭

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-15 09:28
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的C语言代码片段中,确实存在一个变量“visited”重定义的错误。根据您的描述,您正在尝试实现基于邻接矩阵表示的有向带权图的深度优先遍历(DFS)。首先,我们需要修复变量重定义问题,并整理代码结构。

    以下是修改后的完整代码:

    #define MAX_VERTEX_NUM 20
    
    typedef struct {
        char vexs[MAX_VERTEX_NUM]; // 顶点数组
        int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵表示的边
        int vexnum; // 顶点数量
    } MGraph;
    
    // 初始化访问标志数组
    void initVisited(int visited[MAX_VERTEX_NUM]) {
        for (int i = 0; i < MAX_VERTEX_NUM; i++) {
            visited[i] = 0;
        }
    }
    
    // 深度优先遍历递归函数
    void DFS(MGraph G, int i, int visited[MAX_VERTEX_NUM]) {
        visited[i] = 1;
        printf(" %c ", G.vexs[i]);
    
        for (int j = 0; j < G.vexnum; j++) {
            if (G.arcs[i][j] == 1 && !visited[j]) {
                DFS(G, j, visited);
            }
        }
    }
    
    // 深度优先遍历主函数
    void DFSTraverse(MGraph G) {
        int visited[MAX_VERTEX_NUM];
        initVisited(visited);
    
        // 从任意一个未访问过的顶点开始遍历
        for (int i = 0; i < G.vexnum; i++) {
            if (!visited[i]) {
                DFS(G, i, visited);
                printf("\n"); // 在每个连通分量遍历结束后换行
            }
        }
    }
    

    请注意,在实际项目中,请确保MAX_VERTEX_NUM与您图的实际顶点数相匹配。此外,由于是邻接矩阵表示的有向图,所以当(i, j)位置的值为1时,表示从顶点i到顶点j有一条边。在遍历时要特别注意处理非连通图的情况,即从一个未访问过的顶点开始,对整个图进行多次DFS调用,直到所有连通分量都被访问过。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?