[Java] 백준 1260번: DFS와 BFS

U·2024년 2월 23일

백준

목록 보기
49/116

문제


💡 일단 생각하기!

  • 문제 이름 그대로 DFS와 BFS로 풀면 되는 문제!
    너무 오랜만에 알고리즘을 풀어서 푸는 데 꽤나 걸렸다 . . ☆ . .

👀 풀이

package BJ;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static int N, M, V;
	static boolean arr[][], visited[];
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		V = Integer.parseInt(st.nextToken());
		
		arr = new boolean[N + 1][N + 1];
		visited = new boolean[N + 1];
		
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			
			arr[A][B] = true;
			arr[B][A] = true;
		}
		
		dfs(V, 0);
		
		System.out.println();
		
		visited = new boolean[N + 1];

		bfs(V);
	}
	
	
	public static void bfs(int n) {
		Queue<Integer> queue = new ArrayDeque<>();
		queue.add(n);
		visited[n] = true;
		
		while (!queue.isEmpty()) {
			int cur = queue.poll();
			System.out.print(cur + " ");
			
			for (int i = 1; i <= N; i++) {
				if (arr[cur][i] && !visited[i]) {
					queue.add(i);
					visited[i] = true;
				}
			}
		}
	}
	
	public static void dfs(int n, int count) {
		if (count == N) {
			return;
		}
		
		visited[n] = true;
		System.out.print(n + " ");
		
		for (int i = 1; i <= N; i++) {
			if (!visited[i] && arr[n][i]) {
				dfs(i, count + 1);
			}
		}
	}
}
profile
백엔드 개발자 연습생

0개의 댓글