文章
7
粉丝
0
获赞
0
访问
129


评分及理由
(1)得分及理由(满分4分)
学生给出了算法的基本设计思想:先计算每个顶点的入度,然后进行 n 轮循环,每轮寻找入度为 0 且未被处理的顶点。若每轮找到的入度为 0 的顶点数不为 1(即没有或不止一个),则返回 0;否则将其标记为已处理,并更新其邻接点的入度。循环结束后返回 1。该思路与标准答案一致,且逻辑完整清晰。
得分:4分
(2)得分及理由(满分9分)
学生代码整体框架正确,但存在以下问题:
uniquely(MGraph G),学生代码中为 uniqueBy(ALGraph G),且参数类型为 ALGraph(邻接表),而题目明确给出邻接矩阵存储结构 MGraph。这是一个明显的逻辑错误,因为存储结构不同会导致访问边的方式不同。G.Edge[j][i] != INT_MAX && j != i,但题目中邻接矩阵 Edge 存储的是边的存在性(非 0 表示有边),并未说明用 INT_MAX 表示无边。这里使用了未定义的常量,且判断条件多余(通常邻接矩阵中对角线元素为 0 表示无自环)。G.Edge[pos][i] != MAX_INT && G.Edge[pos][i] != 0,同样使用了未定义的常量 MAX_INT,且逻辑与题目要求不符(题目中 Edge[i][j] 非 0 即表示有边)。int Input[G.numVertices]),这不符合标准 C 语法(C99 支持但非常规),且题目未说明支持 C99。尽管算法核心逻辑(拓扑排序过程中检查每轮入度为 0 的顶点数是否为 1)正确,但由于上述存储结构、函数签名和边判断条件的错误,代码无法直接正确运行于题目所给的 MGraph 结构上。
扣分:存储结构错误扣 3 分,边判断条件错误扣 2 分,函数签名错误扣 1 分,可变长度数组使用不当扣 1 分。共扣 7 分。
得分:9 - 7 = 2分
题目总分:4+2=6分
登录后发布评论
暂无评论,来抢沙发