Java에서 그래프에 대한 깊이 우선 검색 또는 DFS를 구현하는 방법은 무엇입니까?

Java Eseo Geulaepeue Daehan Gip I Useon Geomsaeg Ttoneun Dfsleul Guhyeonhaneun Bangbeob Eun Mueos Ibnikka



DFS(깊이 우선 검색)는 루트 노드에서 각 분기를 탐색하기 시작한 다음 역추적하기 전에 그래프의 각 분기를 따라 탐색하기 위해 가능한 한 깊이 이동하는 그래프 순회 검색 알고리즘입니다. 이 검색은 다른 순회 알고리즘에 비해 구현하기 쉽고 메모리를 적게 사용합니다. 연결된 구성 요소의 모든 노드를 방문하여 두 노드 간의 경로를 확인하는 데 도움을 줍니다. DFS는 DAG(Directed Acyclic Graph)와 같은 그래프에 대해 토폴로지 정렬을 수행할 수도 있습니다.

이 문서에서는 제공된 트리 또는 그래프에 대해 DFS를 구현하는 절차를 보여줍니다.

Java에서 그래프에 대한 깊이 우선 검색 또는 DFS를 구현하는 방법은 무엇입니까?

DFS는 주로 각 분기/정점을 정확히 한 번 방문하여 그래프를 검색하는 데 사용됩니다. 교착 상태를 방지하는 데 도움이 되는 그래프의 주기를 감지하거나 식별할 수 있습니다. 퍼즐이나 미로 문제를 해결하는 데 사용할 수 있습니다. DFS는 그래프 알고리즘, 웹 크롤링 및 컴파일러 설계에서 구현/활용될 수 있습니다.







설명을 보려면 깊이 우선 검색 또는 DFS의 아래 코드를 방문하십시오.



수업 그래프 {
사적인 LinkedList 추가노드 [ ] ;
사적인 부울 횡단 [ ] ;

그래프 ( 정수 정점 ) {
추가노드 = 새로운 LinkedList [ 정점 ] ;
횡단 = 새로운 부울 [ 정점 ] ;

~을 위한 ( 정수 = 0 ; < 정점 ; ++ )
추가노드 [ ] = 새로운 LinkedList ( ) ;
}
무효의 addEdge ( 정수 소스, 정수 시작 ) {
추가노드 [ 소스 ] . 추가하다 ( 시작 ) ;
}

위 코드에 대한 설명:

  • 먼저 '라는 이름의 클래스 그래프 '가 생성됩니다. 그 안에는 ' LinkedList ' 명명 된 ' 추가노드[] ' 및 '라는 부울 유형 배열 횡단[] '.
  • 다음으로 '의 생성자에 대한 정점을 전달합니다. 그래프 ” 클래스를 매개변수로 사용합니다.
  • 그 후, “ ~을 위한 ” 루프는 선택한 분기의 각 노드를 통해 이동하도록 생성됩니다.
  • 결국 void 유형 ' addEdge() ”는 정점 사이에 가장자리를 추가하는 데 사용됩니다. 이 함수는 두 개의 매개변수를 사용합니다. 소스 ' 및 대상 정점 ' 시작 '.

그래프를 생성한 후 이제 위에서 생성한 그래프에 대해 깊이 우선 검색 또는 DFS 코드를 추가하겠습니다.

무효의 DFS ( 정수 꼭지점 ) {
횡단 [ 꼭지점 ] = 진실 ;
체계 . 밖으로 . 인쇄 ( 꼭지점 + ' ' ) ;
반복자 이것 = 추가노드 [ 꼭지점 ] . listIterator ( ) ;
~하는 동안 ( 이것. hasNext ( ) ) {
정수 조정 = 이것. 다음 ( ) ;
만약에 ( ! 횡단 [ 조정 ] )
DFS ( 조정 ) ;
}
}

위의 코드 블록에서:

  • 먼저 “ 디에프에스() ” 함수가 생성되어 “ 꼭지점 '를 매개변수로 사용합니다. 해당 정점은 방문한 것으로 표시됩니다.
  • 다음으로 '를 사용하여 방문한 정점을 인쇄하십시오. 출력.출력() ' 방법.
  • 그런 다음 '의 인스턴스를 만듭니다. 반복자 ” 현재 정점의 인접한 정점을 반복합니다.
  • 정점을 방문하지 않으면 해당 정점을 ' 디에프에스() ' 기능.

이제 ' 기본() ” 함수 부분을 사용하여 그래프를 만든 다음 여기에 DFS를 적용합니다.

공공의 공전 무효의 기본 ( 인수 [ ] ) {
그래프 k = 새로운 그래프 ( 4 ) ;
케이. addEdge ( 0 , 1 ) ;
케이. addEdge ( 1 , 2 ) ;
케이. addEdge ( 2 , ) ;
케이. addEdge ( , ) ;
체계 . 밖으로 . 프린트 ( '다음은 깊이 우선 순회입니다' ) ;
케이. DFS ( 1 ) ;
}
}

위 코드에 대한 설명:

  • 먼저 ' 케이 ”에 대한 그래프() ' 방법.
  • 다음으로 “ addEdge() ” 방법은 여러 정점 사이에 가장자리를 추가하는 데 사용됩니다. 이렇게 하면 그래프의 구조가 생성됩니다.
  • 마지막으로 이미 생성된 “ 디에프에스() ' 기능. 루트에서 정점 경로를 찾으려면 깊이 우선 검색 알고리즘을 활용하십시오. 예를 들어 ' 1 '로 전달됩니다. 디에프에스() ' 기능.

컴파일 단계 종료 후:

출력은 깊이 우선 검색이 성공적으로 구현되었음을 보여줍니다.

결론

깊이 우선 검색은 최단 경로 찾기, 스패닝 트리 및 연결 분석과 같은 많은 그래프 알고리즘의 기반을 형성하는 그래프 순회 알고리즘입니다. 루트 노드에서 시작한 다음 역추적하기 전에 해당 분기의 마지막 노드 또는 이탈 노드까지 가능한 한 깊이 이동합니다. 이 기사에서는 Java에서 그래프에 대한 깊이 우선 검색 또는 DFS를 구현하는 절차를 설명했습니다.