위상 정렬과 위상 정렬 연습, 문제 해결 과정에 대해 수행합니다. 그 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를 반환; } }