<데이터 구조> 위상 정렬 문제 해결 과정

  위상 정렬과 위상 정렬 연습, 문제 해결 과정에 대해 수행합니다. 그 LeetCode (207 개) 질문입니다.

  문제 설명 : 이제 당신이 과정을 N-1에 0으로 표시 N의 총을 선택해야합니다. 선택 과목 특정 전에 어떤 AP 과목이 필요합니다. 예를 들어, 연구 과정 0하려는 경우가 완료 1 단원 필요, 우리가 그들을 표현하기 위해 일치를 사용 : [0,1]의 전체 과정과 그 전제 조건이 주어진,이 연구의 모든 과정을 완료 할 수 있는지 여부를 확인합니다.

물론, 위상 정렬이 코드를 다음과 같이 구성되어 이러한 문제를 달성하는 데 사용할 수 있습니다 :

  // 대신에 번호를 사용하여 코스 이름, 시작 번호는 0
    topSort 부울 공공 정적 (INT numCourses, INT [] [] 전제) {
        INT [] = indegree 새로운 INT [numCourses];
        // 배열을 반복, 각 코스 침투 추출
        대 (INT [] 미리 전제 조건)를 {
            indegree [중고 [0] ++;
        }
        // 클래스 0의 정도를 저장하는 데 사용되는 큐를 만들
        큐 <정수> = 큐 새로운 LinkedList의 <> ();
        경우 (나는 <indegree.length; INT 나 0 = I ++) {
            경우 (indegree [I] == 0) {
                queue.add (I);
            }
        }
        // 그래서 코스의 총 수는 각각 하나를 뺀 후 찍은 것으로, 첫 번째 클래스에서 팀 사이클링
        동안 (! queue.isEmpty ()) {
            K = INT queue.remove ();
            // 출력 코스 번호
            에서 System.out.println (K);
            numCourses--;
            // K가 마이너스 1의 과정의 종류에 의존하고, 0은 큐에 추가되는 경우, 클래스의 결정은 0이며
            대 (INT [] 미리 전제 조건)를 {
                (프리 [1] == K) 만약 {
                    indegree [중고 [0] -;
                    경우 (indegree [중고 [0] == 0) {
                        queue.add (프리 [0]);
                    }
                }
            }
        }

        // 과정의 총 개수가 0 인 경우, 모든 과정을 완료
        경우 (numCourses가 0 ==) {
            true를 반환;
        } 다른 {
            false를 반환;
        }
    }

 

   
   

추천

출처www.cnblogs.com/wangxiaoqian/p/11910947.html