Algorithm, boj, 1260(DFS와 BFS)

  • ##DFS
  • 깊이 우선 탐색
  • 재귀 함수로 풀이
  • BFS

  • 넓이 우선 탐색
  • 큐로 풀이
package org.baekjoon;


import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class test1260_1 {

	static boolean[] visited;
	static ArrayList<Integer>[] list;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int node = sc.nextInt();	// 노드 개수
		int line = sc.nextInt();	// 간선 개수
		int start = sc.nextInt();		// 시작 노드

		// 노드 개수 만큼 인접리스트을 만들어준다. 인덱스 헷갈림을 방지하기 위해 +1 해준다.
		list = new ArrayList[node+1];
		// 인접리스트 초기화
		for (int i=1; i< node+1; i++)
			list[i] = new ArrayList<Integer>();

		// 간선 개수만큼 입력이 들어 온다.
		for (int i=0; i < line; i++) {
			 int x = sc.nextInt();
			 int y = sc.nextInt();

			 // 자신의 노드에서 갈 수 있는 노드를 추가해준다.
			 list[x].add(y);
			 list[y].add(x);
		}

		// 인접한 노드가 두개 이상일때 작은 숫자부터 방문 하므로, 오름차순으로 정렬 해준다.
		for (int i=1; i<node+1; i++)
			Collections.sort(list[i]);

		// 노드의 방문 여부를 표시하는 배열. false로 초기화 해준다. 인덱스 혼동 방지를 위해 node+1 해준다.
		visited = new boolean[node+1];
		dfs(start);
		System.out.println();

		// 노드 방문 여부 표시 배열 초기화
		visited = new boolean[node+1];
		bfs(start);

		sc.close();
	}

	static void bfs(int start) {
		// bfs는 큐로 해결.
		Queue<Integer> qu = new LinkedList<Integer>();

		// 첫번째 노드를 방문한다.
		qu.add(start);
		visited[start] = true;

		// 큐메 넣고(방문) 빼면서 , 큐가 빌때까지 반복한다.
		while (!qu.isEmpty()) {
				// 큐에서 노드 한개를 뺀다.
				int out = qu.poll();
				System.out.print(out+ " ");
				// 빼낸 노드의 인접 노드를 방문
				for (int x : list[out]) {
					// 인접노드를 방문한적이 없으면 방문표시 후, 큐에 삽입
					if(visited[x] == false) {
						visited[x] = true;
						qu.add(x);
					}
				}


		}
	}

	static void dfs(int start) {

		// 방문했으면 함수 종료
		if (visited[start] == true)
			return;

		// 방문표시
		visited[start] = true;
		System.out.print(start+" ");

		// 방문한 노드와 인접한 노드를 방문한다.
		for (int i : list[start]) {
			// 인접노드를 방문안했으면 방문하러 간다.
			if (visited[i] == false)
				dfs(i);
		}
	}

}


Reference

문제로 가기 문제 풀이 참고