标签:
1 #include<cstdio> 2 #include<cstring> 3 #include<stack> 4 using namespace std; 5 int first[110],next[10010],to[10010],n; 6 bool b[110]; 7 stack<int> sta; 8 void dfs(int p) 9 { 10 int i,j,k,x,y,z; 11 for (i=first[p];i;i=next[i]) 12 if (!b[to[i]]) dfs(to[i]); 13 b[p]=1; 14 sta.push(p); 15 } 16 void st() 17 { 18 int i,j,k,p,q,x,y,z; 19 memset(b,0,sizeof(b)); 20 for (i=1;i<=n;i++) 21 if (!b[i]) dfs(i); 22 } 23 int main() 24 { 25 int m,i,j,k,x,y; 26 while (scanf("%d%d",&n,&m)&&(n||m)) 27 { 28 memset(first,0,sizeof(first)); 29 memset(next,0,sizeof(next)); 30 memset(to,0,sizeof(to)); 31 for (i=1;i<=m;i++) 32 { 33 scanf("%d%d",&x,&y); 34 next[i]=first[x]; 35 first[x]=i; 36 to[i]=y; 37 } 38 st(); 39 printf("%d",sta.top()); 40 sta.pop(); 41 while (!sta.empty()) 42 { 43 printf(" %d",sta.top()); 44 sta.pop(); 45 } 46 printf("\n"); 47 } 48 49 }
拓扑排序,在每个没有访问过的点DFS。之后入栈。
为什么说是个烂题呢?题上没有说m的范围,所以m=0的时候不代表输入结束,不能写while (scanf()&&n&&m)。
uva 10305 ordering tasks(超级烂题)——yhx
标签:
原文地址:http://www.cnblogs.com/AwesomeOrion/p/5277722.html