//典型的拓扑排序算法(邻接阵形式),可以作为拓扑排序的模板
ac代码:
#include <stdio.h>
#include <string.h>
#define MAXN 600
int n, m, indegree[MAXN], G[MAXN][MAXN], q[MAXN];
int toposort(){
int i, j, k;
i=0;
while(i<n){
for(j=1; j<=n; j++){
if(indegree[j] == 0){
indegree[j]--;
q[i++] = j;
for(k=1; k<=n; k++) if(G[j][k]) indegree[k]--;
break;
}
}
}
return 1;
}
int main(){
int i, a, b;
while(scanf("%d%d", &n, &m) == 2){
memset(G, 0, sizeof(G));
memset(indegree, 0, sizeof(indegree));
for(i=1; i<=m; i++){
scanf("%d %d", &a, &b);
if(G[a][b] == 0){
G[a][b] = 1;
indegree[b]++;
}
}
toposort();
for(i=0; i<n; i++){
if(i != n-1) printf("%d ", q[i]);
else printf("%d\n", q[i]);
}
}
return 0;
}
本文提供了一个典型的拓扑排序算法实现模板,采用邻接矩阵的形式进行数据存储,并通过示例代码详细展示了如何进行拓扑排序的过程。适用于解决依赖关系排序问题。
992

被折叠的 条评论
为什么被折叠?



