文章
67
粉丝
68
获赞
0
访问
4.1k
(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] )
{cout<<G.VerticesList[k]; n++}
//K顶点总数已经计算至n;
return n;
}
评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生的设计思想与标准答案基本一致。第一步,通过遍历邻接矩阵,统计每个顶点的入度和出度,并分别存储在数组中。第二步,遍历所有顶点,判断出度是否大于入度,若是则输出顶点名称并计数。思路清晰、正确,因此不扣分。
(2)得分及理由(满分9分)
得分:8分
理由:学生的代码整体实现了算法功能,逻辑正确,但存在以下两个小问题:
1. 代码中使用了C++的输出流 `cout`,而题目要求是C/C++描述,且标准答案和类型定义均偏向C风格。虽然这不属于逻辑错误,但在严格的C语境下,应使用 `printf` 进行输出。考虑到题目允许C/C++,此处仅作提醒,不扣分。
2. 代码中注释“所有节点入度出度已经计算完毕”的位置,实际上是在双重循环结束后,但注释写在循环内部,可能引起误解。这属于代码风格/注释位置不严谨的问题,不...
登录后发布评论
暂无评论,来抢沙发