文章

92

粉丝

68

获赞

0

访问

11.3k

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

(1) 两次for循环统计所有节点的入度和出度,分别存储到数组in[MAXV]和out[MAXV]. 最后统计所有出度大于入度的顶点,总数计入n;

(2)  

int printVertices(MGraph G){

int in[MAXV] = {0};int out[MAXV] = {0} ; int n=0;

for (int i=0 ; i< G.numVertices;i++)

    for( (int j=0 ; j<G.numVertices;j++))

         if(G.Edge[ i ][ j ] == 1)

         {in[ j ]++;out[i]++;}

//所有节点入度出度已经计算完毕

for (int k=0 ;k<G.numVertices;k++)

    if( out[k] > in[k] )

    {printf(k);   n++}

//K顶点总数已经计算至n;

return n;

}


评分及理由

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

得分:4分

理由:学生的设计思想与标准答案基本一致。第一步,通过遍历邻接矩阵统计每个顶点的入度和出度,并分别存储到数组in和out中;第二步,遍历所有顶点,判断出度是否大于入度,若是则输出并计数。思路清晰完整,没有逻辑错误,因此给满分。

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

得分:6分

理由:学生的代码实现了算法思想,但在实现细节上存在两处逻辑错误:
1. 输出语句 printf(k); 是错误的。题目要求输出顶点的名称(字符),而k是整数下标。正确做法应为 printf("%c", G.VerticesList[k]);。此错误导致输出结果不符合题意,属于逻辑错误,扣2分。
2. 代码中注释“所有节点入度出度已经计算完毕”之前的循环,其内层循环的括号使用有误:for( (int j=0 ; j<G.numVertices;j++)) 多了一个右括号,但考虑...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发