文章

202

粉丝

0

获赞

0

访问

48.3k

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


评分及理由

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

得分:4分

理由:学生的基本设计思想与标准答案一致。正确描述了通过计算入度、循环寻找入度为0的顶点、每次只能有一个入度为0的顶点才能保证拓扑序列唯一,否则返回0。思路清晰完整,无逻辑错误。

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

得分:6分

理由:算法整体框架正确,但存在以下逻辑错误:
1. 在计算入度的双重循环中,内层循环的迭代变量写错:`for(int j=0; j 2. `indegree` 数组未初始化。使用 `malloc` 分配后,其内容未清零,直接进行 `indegree[j]++` 会导致结果错误。应初始化为0。
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分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发