文章
21
粉丝
0
获赞
0
访问
2.0k
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的零出度算法”,并试图通过出度来解决问题,这与拓扑排序的...
登录后发布评论
暂无评论,来抢沙发