文章
202
粉丝
0
获赞
0
访问
48.3k

评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生的基本设计思想与标准答案一致。正确描述了通过计算入度、循环寻找入度为0的顶点、每次只能有一个入度为0的顶点才能保证拓扑序列唯一,否则返回0。思路清晰完整,无逻辑错误。
(2)得分及理由(满分9分)
得分:6分
理由:算法整体框架正确,但存在以下逻辑错误:
1. 在计算入度的双重循环中,内层循环的迭代变量写错:`for(int j=0; j
3. 在寻找入度为0的顶点时,代码中 `if(indegree[j]==0){ zeroNum++; key=j; }` 的写法在两次识别中均未用大括号明确包含两条语句,但根据缩进和上下文,逻辑上可以理解为两条语句都包含在if内,此处不扣分。
4. 当找到唯一入度为0的顶点后,应将该顶点的入度标记为已处理(如设为-1),防止后续重复被找到。学生代码中直接进行 `indegree[m]--` 但未对 `indegree[key]` 进行标记,这可能导致在下一轮循环中该顶点入度仍为0(因为减操作后可能又变为0)而被重复计数,但结合整体循环和条件判断,由于每次循环都会重新寻找入度为0的顶点,且该顶点已被处理过(其出边已减去),在无环情况下一般不会再次出现入度为0,但严格来说缺少标记步骤是一个缺陷。不过标准答案中进行了标记(`inDegree[zeroInDegreeIndex] = -1`),学生未做,属于逻辑不严谨。
扣分:第1、2点属于关键逻辑错误,各扣1分;第4点逻辑不严谨,扣1分。总计扣3分,得6分。
题目总分:4+6=10分
登录后发布评论
暂无评论,来抢沙发