拓扑排序(java)
void topsort() { int i,j,len,cnt; Stack<Integer> s=new Stack<Integer>(); int[] indegree=new int[100]; int[] res=new int[100]; for(i=0;i<n;i++) for(j=0;j<n;j++) if(g[i][j]==1)indegree[j]++; for(i=0;i<n;i++)if(indegree[i]==0)s.push(i); cnt=0; while(!s.isEmpty()) { i=s.pop(); res[cnt++]=i; for(j=0;j<n;j++) { if(g[i][j]==1&&indegree[j]>0) { indegree[j]--; if(indegree[j]==0)s.push(j); } } } if(cnt==n) for(i=0;i<n;i++)System.out.print(res[i]+" "); else System.out.println("ERROR"); }
注意:用stack和que的差别
stay hungry stay foolish

浙公网安备 33010602011771号