拓扑排序模板(邻接表+队列)
blog.csdn.net/u012860063/article/details/38017661(拓扑排序模板题解可见)
http://blog.csdn.net/acdreamers/article/details/16902023(链式向前星)
1 struct Edge 2 { 3 int u; 4 int v; 5 int next; 6 }; 7 Edge edge[MAXN]; 8 void addedge(int u,int v) 9 { 10 edge[num].u=u; 11 edge[num].v=v; 12 edge[num].next=head[u]; 13 head[u]=num++; 14 } 15 int toposort()///拓扑,可做模板 16 { 17 queue<int>q; 18 for(int i=1; i<=n; i++) 19 { 20 21 if(in[i]==0)//入度为0的进队列 22 q.push(i); 23 } 24 int k=0; 25 while(!q.empty()) 26 { 27 int u=q.front(); 28 q.pop(); 29 topo[k++]=u; 30 for(int i=head[u]; i!=-1; i=edge[i].next) 31 { 32 int v=edge[i].v; 33 in[v]--; 34 if(in[v]==0) 35 q.push(v); 36 } 37 } 38 if(k<n)return 0;///存在有向环或者图不连通,总之不能进行拓扑排序 39 return 1;///可以进行拓扑排序,有多种情况,topo数组是其中一种序列 40 }
弱渣一枚,欢迎大家指正错误~~