본문 바로가기

개념공부/Java

깊이 우선 탐색

728x90

Collections.sort(리스트) : 리스트를 오름차순 정렬

 

Iterator : 컬렉션에 저장된 요소들을 읽어오는 방법

 

< 선언하는 방법 >

Iterator<Integer> 변수명 = 리스트명.⊙();

 

⊙ listIterator : 양방향 이동 가능

( ArrayList나 LinkedList와 같은 List 인터페이스를 구현한 컬렉션만 가능 )

⊙ iterator() : 단방향 이동

 

-> .hasNext() : 읽어 올 요소가 있으면 True, 없으면 False

-> .next() : 다음 요소를 읽어 옴

-> .remove() : next()로 읽어온 요소를 삭제

 

구현

 

import java.util.*;

 

public class javatest {

      public static void main(String[] args) {

            Scanner sc = new Scanner(System.in);

 

            int n = sc.nextInt(); // 정점의 개수

            int m = sc.nextInt(); // 간선의 개수

            int v = sc.nextInt(); // 탐색을 시작할 정점의 번호

            boolean visited[] = new boolean[n + 1]; // 방문 여부를 검사할 배열

 

            LinkedList<Integer>[] adjList = new LinkedList[n + 1];

 

            for (int i = 0; i <= n; i++) {

                  adjList[i] = new LinkedList<Integer>();

            }

 

            // 두 정점 사이에 여러 개의 간선이 있을 수 있다.

            // 입력으로 주어지는 간선은 양방향이다.

            for (int i = 0; i < m; i++) {

                  int v1 = sc.nextInt();

                  int v2 = sc.nextInt();

                  adjList[v1].add(v2);

                  adjList[v2].add(v1);

            }

 

            // 방문 순서를 위해 오름차순 정렬

            for (int i = 1; i <= n; i++) {

                  Collections.sort(adjList[i]);

            }

 

            System.out.println("DFS - 깊이 우선 탐색");

            DFS(v, adjList, visited);

      }

 

      // DFS( 재귀 함수 )

      public static void DFS(int v, LinkedList<Integer>[] adjList, boolean[] visited) {

            visited[v] = true; // 정점 방문 표시

            System.out.print(v + " "); // 정점 출력

 

            Iterator<Integer> iter = adjList[v].listIterator(); // 정점 인접리스트 순회

            while (iter.hasNext()) {

                  int w = iter.next();

                  if (!visited[w]) { // 방문하지 않은 정점이라면

                        DFS(w, adjList, visited); // 다시 DFS

                  }

            }

      }

}

 

결과

 

'개념공부 > Java' 카테고리의 다른 글

너비 우선 탐색  (0) 2021.02.13
행맨 게임  (0) 2021.01.10