文章
165
粉丝
0
获赞
10
访问
16.2k

评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生的设计思想与标准答案思路一致。通过遍历邻接矩阵的列(计算入度),寻找入度为0的顶点(全为0的列),如果存在多个入度为0的顶点则返回0,如果找不到入度为0的顶点也返回0,每次只处理一个入度为0的顶点,并将其对应行的边移除(将行置0)。思路正确且完整,符合拓扑排序判断唯一性的核心逻辑。
(2)得分及理由(满分9分)
得分:6分
理由:代码整体框架正确,但存在以下逻辑错误:
1. 在第二个for循环中,变量j在循环结束后被使用(G.Edge[j][k]),此时j的值是循环结束后的值,未定义且逻辑错误。应该记录找到的入度为0的顶点索引,并用该索引来清零对应行。
2. 代码末尾有一个多余的"if(cnt == 0) return 0;",这个判断在循环结束后没有意义,且cnt变量在循环外不可访问,属于语法错误。
3. 在第一个内层循环中,一旦找到入度为0的顶点就立即标记visit[j]=1,但此时可能还没有检查完所有列,如果后面还有入度为0的顶点,cnt会继续增加,逻辑上是正确的,但标准做法通常是先统计所有入度为0的顶点数量,再处理。
扣分:第1个错误属于严重逻辑错误,扣2分;第2个错误属于语法和逻辑错误,扣1分。总计扣3分。
题目总分:4+6=10分
登录后发布评论
暂无评论,来抢沙发