拓扑排序
步骤:
1.将所有入度为0的点加入队列中
2.宽搜队列,每次遍历下一个点时,删除该点与上一个节点的连接,同时让该点的入读–,当该点的入读为0时入队即可
3.遍历结束后查看是否所有点都进入过队列,若进入过则该图存在拓扑序列,该拓扑序列即为队列中的顺序队列。
static boolean topsort() {
int z=0;//总共有多少个点进入了队列
for(int i=1;i<=n;i++) {
if(d[i]==0) {
aq.add(i); //队列添加
res.add(i); //答案添加
z++; //个数枚举
}
}
while(!aq.isEmpty()) {
int t=aq.poll();
for(int i=h[t];i!=-1;i=ne[i]) {
int j=e[i];
if(--d[j]==0) {
aq.add(j);
res.add(j);
z++;
}
}
}
return z==n; //若z==n表示所有点都已经如果队伍!
}