文章

87

粉丝

0

获赞

1

访问

17.2k

头像
2024年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月16日 11:23
阅读数 82

(1)设置一个indgree数组用于存储各节点的入度,设置一个outNum用于排序计数,首先对indegree数组进行计算,之后用一个while循环,以图中个节点的总数作为跳出条件对indegree数组进行循环遍历,计算其中入度为0的结点
每次处理时设置count变量用于记录该次处理中节点为0的个数,firstZero用于记录第一个出度为0的结点
若count值不为1,代表拓扑序列不唯一或不存在,返回0
否则将第一个出度为0结点的所有邻接结点置为0,直到整个拓扑排序结束,返回1.
(2)

int uniquely(MGraph G)

{

int outNum=0;
int indegree[i];
for(int i=0;i<G.numVertices;i++)
{indegree[i]=0;//初始化每个边入度为0
 for(int j=0;j<G.numVertices;j++) { indegree[i]+=Edge[j][i];//计算每个边入度}}

while(outNum<G.numVertices)
{
int firstZero=0;
int count=0;

for(int i<0;i<G.numVertices;i++)
{if(indgree[i]==0) count++;firstZero=i;}
if(count!=1)return 0;//0度结点数量大于1,直接返回0
else

{
for(int i=0;i<G.numVertices;i++)
{
if(Edge[firstZero][j]==1)indegree[j]--;//删去已排序结点的邻接结点

}

}

return 1;//排序完成,输出1;
}

 


评分及理由

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

得分:3分

理由:学生的设计思想基本正确,描述了如何通过计算入度和处理入度为0的节点来判断拓扑序列的唯一性。但描述中有些地方不够清晰,例如“将第一个出度为0结点的所有邻接结点置为0”应为“将第一个入度为0结点的所有邻接结点的入度减1”。此外,未明确提到在每次迭代中只能有一个入度为0的节点才能保证拓扑序列唯一。...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发