文章

74

粉丝

0

获赞

0

访问

49.1k

头像
2023年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月12日 16:26
阅读数 619

(1)算法思想:初始化计数器count=0遍历邻接矩阵,若一个节点的出度大于入度,就计数器count+1,并输出节点。最后返回计数器的个数。

(2)代码:

int printVertices(MGraph G){
    int n=MAXV;
    int count=0;//计数器,用于记录K顶点的个数
    for(int i=0;i<n;i++){
        int outdegree=0;//节点的出度
        int indegree=0;//节点的入度
        for(int j=0;j<n;j++){
            if(G.Edge[i][j]==1){
                indegree++;
            }
            if(G.Edge[j][i]==1){
                outdegree++;
            }
        }
        if(indegree<outdegree){
            count++;
            printf(VerticesList[i]);//输出K顶点
        }
    }
    return count;
}

 


评分及理由

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

学生给出的算法思想基本正确,提到了遍历邻接矩阵、统计每个顶点的出度和入度、比较出度和入度并计数输出。但描述较为简略,没有详细说明如何通过邻接矩阵计算入度和出度(特别是入度需要遍历列而不是行),也没有提到需要借助VerticesList来输出顶点名称。扣1分。

得分:3分

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

代码实现存在以下问题:

  • 逻辑错误1:在计算入度和出度时,学生将indegree和outdegree的计算逻辑弄反了。在邻接矩阵中,G.Edge[i][j]表示从i到j的边,所以应该累加到i的出度和j的入度。但学生代码中,当G.Edge[i][j]==1时增加的是indegree(实际应该是outdegree),当G.Edge[j][i]==1时增加的是outdegree(实际应该是indegree)。这...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发