文章

266

粉丝

21

获赞

1

访问

12.6k

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


评分及理由

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

得分:2分

理由:学生答案的基本设计思想存在部分正确性。正确之处包括:使用数组存储顶点入度,通过统计入度为0的顶点个数来判断拓扑序列的唯一性,以及通过移除入度为0的顶点来更新图。但是,答案中存在以下逻辑错误:

  • 描述中"令其Edge[i][ ] = 0"不准确,应该是更新相关顶点的入度,而不是直接修改邻接矩阵。
  • 没有明确说明需要循环处理所有顶点(共G.numVertices次),而是提到"重复前面过程共MAXV次",MAXV是常量,可能不等于实际顶点数。
  • 没有考虑图中可能存在环的情况(即没有入度为0的顶点),但标准答案中处理了该情况。

由于思路核心正确但细节有误,扣2分。

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

得分:3分

理由:学生答案的代码实现存在严重逻辑错误,具体如下:

  • 外层循环使用for(int i = 0; i < MAXV; i++),但MAXV是常量,可能大于实际顶点数G.numVertices,应使用G.numVertices。
  • 入度计算错误:代码A[j] = A[j] + G.Edge[j][k];实际计算的是顶点的出度,而非入度。正确应计算G.Edge[k][j](即列和)。
  • 入度统计位置错误:在内部循环中多次检查if(A[j] == 0)并累加sum,这会导致sum统计不准确。
  • 条件判断错误:在每次外层循环中,如果sum等于1就返回0,逻辑反了。正确应在任何时刻sum>1时返回0,表示不唯一;如果sum==0且未处理完所有顶点,表示有环,也应返回0。
  • 更新操作错误:代码通过G.Edge[w][k] = 0;修改原图,但标准方法应更新入度数组,且修改原图可能影响后续操作。
  • 返回位置错误:返回1的语句在外层循环内部,导致过早返回。

尽管代码结构有拓扑排序的雏形,但核心逻辑(入度计算、唯一性判断、更新操作)均错误,扣6分。考虑到部分思路正确(如使用数组记录、查找入度为0顶点),给予3分。

题目总分:2+3=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发