깊이 우선 순위 트래버스
깊이 우선 순위 트래버스는 한 사람에 의해 미로를 걷는 것과 유사합니다.
그림과 같이, 시작점에서 가장자리를 선택하여 다음 정점으로 걸어갑니다. 정점에 도달하기 전에이 정점이 도착한 것으로 표시됩니다.
표시된 정점이 오면 이전 정점으로 돌아가서 도달하지 않은 정점을 선택하십시오.
후퇴 한 교차로로의 통과가 없을 때 계속 후퇴하십시오.
연결된 구성 요소 의 경우 개념을보십시오. 방향이없는 그래프 G의 극도로 연결된 서브 그래프 G는 G의 연결된 구성 요소라고합니다. 연결된 그래프의 연결된 구성 요소, 즉 IT 자체 및 연결되지 않은 그래프에는 여러 개의 연결된 구성 요소가 있습니다.
구체적인 예를 살펴 보겠습니다.
패키지 com.datrastructure.graph; // 무단 그래프의 유니폼 구성 요소를 찾으십시오. 공개 클래스 구성 요소 {개인 그래프 그래프; // 입력 개인 부울을 저장하기위한 배열; // 상태 개인 int componentcount의 상태를 저장; // 연결된 구성 요소의 수가 초기화 된 개인 구성 요소를 저장합니다. 구성 요소 (그래프 그래프) {this.graph = 그래프; componentCount = 0; // 연결된 구성 요소의 초기 숫자는 0 방문 = new boolean [graph.v ()]; mark = new int [graph.v ()]; for (int i = 0; i <Graph.v (); i ++) {false; // 초기 액세스 상태 [// 초기 액세스 상태 [// 노드의 구성 요소는 (int i = 0; i <Graph.v (); i ++)에 대해 -1}로 표시됩니다. {// 방문되지 않은 노드의 깊이 우선 순위 트래버스 if (! visited [i]) {dfs (i); componentCount ++; // 후에 연결된 구성 요소 끝에서 연결된 구성 요소}}}}}}}} {방문 된 [i] = true; // node i에 액세스되었습니다. mark [i] = componentCount; // 노드 I는 (int node : graph.adjacentNode (i))에 대한 현재 연결된 구성 요소 (marks)에 속합니다 (! visited [node]) // dfsdfs (node)}}}}}}}}}}); isconnected (int v, int w) {return mark [v] == mark [w]; // 두 노드가} public int getComponentCount () {return componentCount; // return} // public class formonents {// private components} // 그래프의 참조 // 개인 부울 [] 방문; // DFS 프로세스 중에 노드가 액세스되는지 // private int count; // China Unicom 구성 요소의 수를 기록하십시오. // private int [] id; // 각 노드에 대한 해당 중국 유니폼 구성 요소 마크 // // 깊이 우선 순위 그래프 // private void dfs (int v) {/// visited [v] = true; // 노드 v의 액세스 상태가 true로 설정됩니다. // id [v] = ccount; // 노드 v의 해당 중국 유니폼 마크는 ccount로 설정되어 /// // 노드 v i // (int i : g.adjacentnode (v)) {// // 인접 포인트가 아직 접근하지 않은 경우 // // 깊이 우선 순위가 인접한 지점 I // dfs (i); //} //} // // 생성자는 불의 그래프 // public 구성 요소 (그래프 그래프)의 연결된 구성 요소를 찾기 위해 {//// // Algorithm 초기화 // g = 그래프; /// // 배열 스토리지 그래프에서 접근 된 상태를 방문했습니다. 어레이 스토리지 그래프 G // id = new int [gv ()]; /// // // 연결된 구성 요소의 수는 0 // ccount = 0; /// // 방문 된 모든 배열을 거짓으로 설정합니다. 모든 ID 배열을 (int i = 0; i <gv (); i ++) {// visited [i] = false; // id [i] = -1; //} /// // (int i = 0; i <gv (); i ++) //에 액세스하지 않은 // (! // 깊이 우선 순위 횡단 // dfs (i); // ccount ++; //} //} // 그래프 // int count () {// return ccount; //} // // 쿼리가 연결되어 있는지 여부 (w)의 마크가 동일하게 (node v 및 bo) v, int w) {// assert v> = 0 && v <gv (); // assert w> = 0 && w <gv (); // return id [v] == id [w]; //} //}패스 구성 요소의 수는 3입니다
요약
위의 내용은 딥 우선 순위 트래버스 및 연결 구성 요소 코드 예제의 Java 프로그래밍 구현에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 단점이 있으면 메시지를 남겨 두십시오. wulin.com을 팔로우하면 더 많은 것을 얻을 수 있습니다.