拓扑排序(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的差别

posted @ 2021-03-02 16:09  金龙喩  阅读(140)  评论(0)    收藏  举报