0
点赞
收藏
分享

微信扫一扫

拓扑排序 链式向前星

罗子僧 2023-08-23 阅读 46

#include<stdio.h> 

 #include<stdlib.h> 

 #include<string.h> 

 #include<math.h> 

 #include<iostream> 

 #include<algorithm> 

 using namespace std; 



 const int sizen=1000000; 

 struct ele 

 { 

     int to; 

     int next; 

 }p[sizen]; 

 bool Map[1000][1000]; 

 int degree[1000]; 

 int W,E,e; 

 int head[sizen]; 

 int a[sizen]; 



 void add(int x,int y) 

 { 

     p[e].to=y; 

     p[e].next=head[x]; 

     head[x]=e++; 

 } 



 void Tosort(int n) 

 { 

     int i,k; 

     int t=0; 

     for(i=1;i<=n;i++) 

         if(degree[i]==0) 

             a[t++]=i; 

     for(i=1;i<=n;i++) 

     { 

         for(k=head[a[i-1]];k!=-1;k=p[k].next) 

         { 

             degree[p[k].to]--; 

             if(degree[p[k].to]==0) 

                 a[t++]=p[k].to; 

         } 



     } 

     for(i=0;i<n-1;i++) 

         printf("%d ",a[i]); 

     printf("%d\n",a[n-1]); 

 } 



 int main() 

 { 

     int x,y; 

     int V,E; 

     while(scanf("%d%d",&V,&E)!=EOF) 

     { 

         e=0; 

         memset(a,0,sizeof(a)); 

         memset(Map,false,sizeof(Map)); 

         memset(degree,0,sizeof(degree)); 

         memset(head,-1,sizeof(head)); 

         while(E--) 

         { 

             scanf("%d%d",&x,&y); 

             add(x,y); 

             if(!Map[x][y]) 

             { 

                 Map[x][y]=true; 

                 degree[y]++; 

             } 

         } 

         Tosort(V); 

     } 

     return 0; 

 }

举报

相关推荐

0 条评论