1. 程式人生 > >拓撲序列_鄰接矩陣實現(Topological sequence)

拓撲序列_鄰接矩陣實現(Topological sequence)

#include<iostream> #include<limits.h> using namespace std; int main() { int n; cin>>n; n+=1; int vertex[n][n],degree[n],output[n],judge[n]; for(int i=1;i<n;i++) { for(int j=1;j<n;j++) vertex[i][j]=INT_MAX; degree[i]=0; output[i]=0;
judge[i]=1; } int m,p=0; cin>>m; int a[m],b[m]; while(p<m) { cin>>a[p]>>b[p]; vertex[a[p]][b[p]]=1; degree[b[p++]]++; }
m=1; p=n-1; while(p--) { bool u=false; for(int i=1;i<n;i++)      {      if(degree[i]==0&&judge[i]==1)      {     
u=true; output[m++]=i;      for(int j=1;j<n;j++)      {      if(vertex[i][j]!=INT_MAX)      {      vertex[i][j]==INT_MAX;      degree[j]--;      }      }      judge[i]=0;      }      }      if(u!=true)      goto stop; } stop: if(output[n-1]==0) cout<<"wrong"; else { for(int i=1;i<n;i++)        cout<<output[i]<<" "; } return 0; }