이 문제는 DFS와 BFS를 구현만 하면 되는 간단한 문제이다.
DFS는 재귀로 진행하였고 BFS는 큐로 풀었다 다음에는 DFS를 스택으로 풀어보아야겠다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int n;
static int m;
static int start;
static boolean[] visited;
static int[][] check;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
start = Integer.parseInt(st.nextToken());
check = new int[1001][1001];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
check[x][y] = 1;
check[y][x] = 1;
}
visited = new boolean[1001];
dfs(start);
visited = new boolean[1001];
System.out.println();
bfs(start);
}
public static void dfs(int curr_node) {
visited[curr_node] = true;
System.out.print(curr_node + " ");
for (int j = 0; j <= n; j++) {
if (check[curr_node][j] == 1 && visited[j] == false) {
dfs(j);
}
}
}
public static void bfs(int cutt_node) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(cutt_node);
visited[cutt_node] = true;
System.out.print(cutt_node + " ");
while (!queue.isEmpty()) {
int temp = queue.poll();
for (int j = 0; j <= n; j++) {
if (check[temp][j] == 1 && visited[j] == false) {
queue.offer(j);
visited[j] = true;
System.out.print(j + " ");
}
}
}
}
}
'백준' 카테고리의 다른 글
[백준] 1931 회의실 배정 (JAVA) (0) | 2021.08.21 |
---|---|
[백준] 11053 가장 긴 증가하는 부분수열 (JAVA) (0) | 2021.08.20 |
[백준] 1012 유기농배추(JAVA) (0) | 2021.08.20 |
[백준 ]11401 이항계수 3 (JAVA) (0) | 2021.08.15 |
[백준] 11051 이항계수2 (JAVA) (0) | 2021.08.15 |