/*hdu1285--采用邻接表记录两者之间的关系*/
2 #include<cstdio>
3 #include<cstring>
4 int head[510];
5 int indegree[510];
6 int queue[510];
7 int num;
8 struct stu{
9 int to,next;
10 }edge[2510];
11 void inin(){//初始化
12 memset(indegree,0,sizeof(indegree));
13 memset(head,-1,sizeof(head));
14 num=0;
15 }
16 void add(int a,int b){//添加边
17 stu E={b,head[a]};
18 edge[num]=E;
19 head[a]=num++;
20 indegree[b]++;
21 }
22 void topo(int n){
23 int i,j,id,t=0;
24 for(j=1;j<=n;j++){
25 for(i=1;i<=n;i++){
26 if(indegree[i]==0){
27 id=i;
28 break;
29 }
30 }
31 queue[t++]=id;indegree[id]=-1;
32 for(i=head[id];i!=-1;i=edge[i].next){
33 int k=edge[i].to;
34 indegree[k]--;
35 }
36 }
37 printf("%d",queue[0]);//输出拓扑序列
38 for(i=1;i<n;++i){
39 printf(" %d",queue[i]);
40 }
41 printf("\n");
42 }
43 int main(){
44 int n,m,i,j,a,b;
45 while(scanf("%d%d",&n,&m)!=EOF){
46 inin();
47 for(i=1;i<=m;i++){
48 scanf("%d%d",&a,&b);
49 add(a,b);
50 }
51 topo(n);
52 }
53 return 0;
54 }
拓扑序
最新推荐文章于 2021-07-06 15:48:29 发布