
문제 이름 그대로 DFS와 BFS를 구현하라는 문제..ㅎ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
	static StringBuilder result = new StringBuilder(); 
	static boolean[] check; 
	static int[][] arr;
	static int node, line, start;
	static Queue<Integer> q = new LinkedList<>();
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		node = Integer.parseInt(st.nextToken());
		line = Integer.parseInt(st.nextToken());
		start= Integer.parseInt(st.nextToken());
		
		arr = new int[node+1][node+1];
		check = new boolean[node+1]; 
		
		for(int i = 0 ; i < line ; i ++) {
			StringTokenizer str = new StringTokenizer(br.readLine());
			
			int a = Integer.parseInt(str.nextToken());
			int b = Integer.parseInt(str.nextToken());
			
			arr[a][b] = arr[b][a] =  1;	
		}
		dfs(start);
		result.append("\n");
		check = new boolean[node+1]; 
		bfs(start);
		
		System.out.println(result); 
	}
	public static void dfs(int start) {
		
		check[start] = true;
		result.append(start + " ");
		
		for(int i = 1 ; i <= node ; i++) {
			if(arr[start][i] == 1 && !check[i]) 
				dfs(i); 
		}
		
	}
	
	public static void bfs(int start) {
		q.add(start);
		check[start] = true;
		
		while(!q.isEmpty()) {
			
			start = q.poll();
			result.append(start + " ");
			
			for(int i = 1 ; i <= node ; i++) {
				if(arr[start][i] == 1 && !check[i]) { 
					q.add(i); 
					check[i] = true;
				}
			}
		}
		
	}
}

DFS와 BFS에 대한 개념은 이전 글(파이썬으로 풀어서 정리한 글)에서 정리했으니까 생략하고 자바 개념을 정리해보겠음
StringBuilder 사용하는 이유
package BaekJoon_java;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class boj_1260 {
	static StringBuilder result = new StringBuilder(); //결과값 저장
	static boolean[] check; //노드 방문여부 체크
	static int[][] arr;
	
	static int node, line, start;
	static Queue<Integer> q = new LinkedList<>();
	public static void main(String[] args) throws IOException {
		
		//입력 버퍼
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//공백 기준으로 문자열 자르기
		StringTokenizer st = new StringTokenizer(br.readLine());
		node = Integer.parseInt(st.nextToken());
		line = Integer.parseInt(st.nextToken());
		start= Integer.parseInt(st.nextToken());
		
		arr = new int[node+1][node+1];
		check = new boolean[node+1]; 
		
		for(int i = 0 ; i < line ; i ++) {
			StringTokenizer str = new StringTokenizer(br.readLine());
			
			int a = Integer.parseInt(str.nextToken());
			int b = Integer.parseInt(str.nextToken());
			
			arr[a][b] = arr[b][a] =  1;	//양방향 간선이기 때문
		}
		//sb.append("\n");
		dfs(start);
		result.append("\n");
		//bfs 구하기 위해 방문여부 초기화
		check = new boolean[node+1]; 
		bfs(start);
		
		System.out.println(result); //결과 출력
		
	}
	public static void dfs(int start) {
		
		check[start] = true;
		result.append(start + " ");
		
		for(int i = 1 ; i <= node ; i++) {
			if(arr[start][i] == 1 && !check[i]) //현재 정점과 연결되어 있고 이전에 방문하지 않았다면
				dfs(i); //재귀함수 부르기
		}
		
	}
	
	public static void bfs(int start) {
		q.add(start);
		check[start] = true;
		
		while(!q.isEmpty()) {
			
			start = q.poll();
			result.append(start + " ");
			
			for(int i = 1 ; i <= node ; i++) {
				if(arr[start][i] == 1 && !check[i]) { //현재 정점과 연결되어 있고 이전에 방문하지 않았다면
					q.add(i); //큐에 넣기
					check[i] = true;
				}
			}
		}
		
	}
}
DFS, BFS 자바버전도 눈에 익도록 많이 봐둬야겠다..!