文章

7

粉丝

0

获赞

0

访问

129

头像
2024年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月6日 16:25
阅读数 16


评分及理由

(1)得分及理由(满分4分)

学生给出了算法的基本设计思想:先计算每个顶点的入度,然后进行 n 轮循环,每轮寻找入度为 0 且未被处理的顶点。若每轮找到的入度为 0 的顶点数不为 1(即没有或不止一个),则返回 0;否则将其标记为已处理,并更新其邻接点的入度。循环结束后返回 1。该思路与标准答案一致,且逻辑完整清晰。

得分:4分

(2)得分及理由(满分9分)

学生代码整体框架正确,但存在以下问题:

  1. 函数名与题目要求不一致:题目要求函数名为 uniquely(MGraph G),学生代码中为 uniqueBy(ALGraph G),且参数类型为 ALGraph(邻接表),而题目明确给出邻接矩阵存储结构 MGraph。这是一个明显的逻辑错误,因为存储结构不同会导致访问边的方式不同。
  2. 在计算入度时,判断条件为 G.Edge[j][i] != INT_MAX && j != i,但题目中邻接矩阵 Edge 存储的是边的存在性(非 0 表示有边),并未说明用 INT_MAX 表示无边。这里使用了未定义的常量,且判断条件多余(通常邻接矩阵中对角线元素为 0 表示无自环)。
  3. 在更新入度时,判断条件为 G.Edge[pos][i] != MAX_INT && G.Edge[pos][i] != 0,同样使用了未定义的常量 MAX_INT,且逻辑与题目要求不符(题目中 Edge[i][j] 非 0 即表示有边)。
  4. 代码中使用了可变长度数组(如 int Input[G.numVertices]),这不符合标准 C 语法(C99 支持但非常规),且题目未说明支持 C99。

尽管算法核心逻辑(拓扑排序过程中检查每轮入度为 0 的顶点数是否为 1)正确,但由于上述存储结构、函数签名和边判断条件的错误,代码无法直接正确运行于题目所给的 MGraph 结构上。

扣分:存储结构错误扣 3 分,边判断条件错误扣 2 分,函数签名错误扣 1 分,可变长度数组使用不当扣 1 分。共扣 7 分。

得分:9 - 7 = 2分

题目总分:4+2=6分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发