文章

21

粉丝

0

获赞

0

访问

2.0k

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

1.利用DFS的零出度算法,首先遍历所有边,设置vert_out数组记录各节点出度,随后从出度最小的节点开始逐步对图减去相应的边与节点,遍历过程中任意时刻vert_out出度为0的节点超过1个时即说明存在不唯一的拓扑序列。

2.

int is_signeton_topology(MGraph* g){//g.EDGE的主对角线为-1,此处假设不存在路径即标记为-1

int vert_out[MAXV];

for(int i = 0; i<MAXV,i++){

vert_out[i]=0;//初始化

for(int j = 0; j<MAXV,j++)

if(g.EDGE[i][j] != 0){

vert_out[i]+=1;

}

}

 

while(true){

int singleton = MAXV

int mark = 0;

int min = -2;

for(int i=0,i<MAXV,i++){

if(vert_out[i] != -1){

singleton--;

}

if(vert_out[i] ==0){

mark++

min = i;//记录出度为0的节点

}

if(i==MAXV){

return 0;//说明全部消完了,拓扑路径唯一

}

 

vert_out[min]=-1;//删除该节点

for(int v = 0; v<MAXV,v++){

if (g.Edge[v][min]!=0){//此时min必然不为-2了,不会越界。

vert_out[v]--;//边的起始节点出度-1;

}

}

if(mark>1){

return 1;//说明有不唯一的拓扑路径

}

}

}


评分及理由

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

得0分。学生的基本设计思想存在严重错误。题目要求判断拓扑序列是否唯一,标准方法是基于入度的拓扑排序(Kahn算法),在每一步中检查入度为0的顶点数量。但学生使用了“DFS的零出度算法”,并试图通过出度来解决问题,这与拓扑排序的...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发