堆排序

DNA图谱 / 问答 / 标签

堆排序的代码(拓扑排序的伪代码)

额。。程序最后多打了一个大括号这段代码的功能是对一个有向图进行拓扑排序,若有环则抛出异常首先要明白拓扑排序是做什么的,详见百度百科--拓扑排序(有图有样例)然后说这段代码:通过将图中入度为0的点存入队列,用队首的点去查找与此点连接且入度为1的点,把找到的点在存入队列,令这队首的点出队。如此至到找不到入度为0的点,结束while循环,最后再判断进入再离开队列的点的个数若小于图中总点数,则判定有环。注:可以根据注释判断函数功能void Graph::topsort(){ Queue<Vertex> q;//定义存储点的信息的队列,由于是伪代码,信息类型不详,一般是该点在题目中的编号 int counter=0;//记录当前有几个点已经出队了 q.makeEmpty();//初始化队列,令其清空 for each Vertex v //初始化查找入度为0的点,若找到则入队 if(v.indegree==0) //判断入度为0 q.enqueue(v); //入队 while(!q.isEmpty()) //若队列不为空则一直循环 { Vertex v=q.dequeue(); //队首点出队 v.topNum=++counter; //累加出队点数 for each Vertex w adjacent to v //用此出队点,即刚才的队首,查找仅与其相连的点,并将找到的点入队 if(--w.indegree==0) q.enqueue(w); } if(counter!=NUM_VERTICES) //若总出队点不等于图中总点数,则有环 throw CycleFoudException();}