hdu 1285 토폴로지 정렬 자바 구현


/*
       :            ,                    ,      ,
                             。        ,             
              (              ),      。  
  */
import java.util.Scanner;

public class Main {
	//      ,      
	static int n,m;  //              
	static int[] degree,sorted; //              
	static int[][] arc;   //            
	static Scanner sc=new Scanner(System.in);
	public static void main(String[] args) {
		while(sc.hasNext()){
			n=sc.nextInt(); //       
			m=sc.nextInt(); //        
			init();   //      
			topoSort(); //    
		}
	}
	//    
	private static void topoSort() {
		int s=0;//              
		while(s<n){
			int i=0;
			//1)      0   
			for(;i<n;i++){//      0        ,  i 
				if(degree[i]==0&&sorted[i]==0){
					break;
				}
			}
			if(i==n){//        ,       
				System.out.println("      ,    !");
				return;
			}
			//2)   ,  (            1)
			sorted[i]=1;//       1
			s++; //          
			System.out.print(i+1); //   
			if(s<n){//         ,           
				System.out.print(" ");
			}
			//  i   j        ---j    1
			for(int j=0;j<n;j++){
				if(arc[i][j]==1){
					degree[j]--;
				}
			}
		}
		System.out.println();
	}
	//      
	private static void init() {
		//   
		sorted=new int[n];
		degree=new int[n];
		arc=new int [n][n];
		for(int i=0;i<n;i++){
			sorted[i]=0; //0      ,1       
			degree[i]=0; //   ,    0
			//           ,    0
			for(int j=0;j<n;j++){
				arc[i][j]=0;
			}
		}
		//      ,
		for(int i=0;i<m;i++){
			int a=sc.nextInt()-1;
			int b=sc.nextInt()-1;
			if(arc[a][b]==0){//           
				arc[a][b]=1; //           
				degree[b]++; //        
			}
		}
	}

}

좋은 웹페이지 즐겨찾기