//拓扑排序模板(邻接矩阵)表示 #include<iostream> using namespace std; #define M 100 bool graph[M][M]; //邻接阵 int indegree[M]; //记录顶点的入度 int n;//n为顶点个数 void topsort() { int i,j,k; for(i=1;i<=n;++i) //遍历n次每次找出一个顶点 { for(j=1;j<=n;++j) //遍历所有的结点 { if(indegree[j]==0) { indegree[j]--; //该顶点的入度为-1,防止该顶点被在此遍历到 if(i!=n) printf("%d ",j); else printf("%d/n",j); for(k=1;k<=n;++k) { if(graph[j][k]) indegree[k]--; //与该顶点关联的顶点的入度递减 } break; } } } } int main() { // freopen("in.txt","r",stdin); int i,j,m,k; while(scanf("%d",&n)!=EOF) { scanf("%d",&m);//输入边数 memset(graph,false,sizeof(graph)); memset(indegree,0,sizeof(indegree)); for(i=1;i<=m;i++) { scanf("%d %d",&j,&k); graph[j][k]=true; indegree[k]++; } topsort(); } return 0; }