拓扑排序复习 ==> 链接
将图进行拓扑排序之后,能在拓扑序列上做一些动态规划算法(DAG上的DP)
//Deg[]数组记录每一个顶点的入度 //N 为总顶点数,各个顶点编号1~N for(int i=1; i<=N; i++) if(Deg[i] == 0) que.push(i); while(!que.empty()){ int v = que.front(); que.pop(); num++;//拓扑序列的顶点数 //下面是访问 v 顶点的出度,这里使用静态邻接表写法 for(int i=Head[v]; i!=-1; i=Edge[i].nxt){ int Next_v = Edge[i].v; Deg[Next_v]--;//将出度顶点能到达的点的入度-1,相当于删边操作 if(Deg[Next_v] == 0) que.push(Next_v); } } if(num != N){ //不能构成合法的拓扑排序,比如有环的情况 }else{ //... }