[BOJ] 백준 1260번 : DFS와 BFS - Java

2024. 12. 19. 21:51·Algorithm Solving/Java

https://www.acmicpc.net/problem/1260


1. main

import java.io.*;
import java.util.*;

public class Main {
    static int[][] arr;
    static boolean[] visited;
    static int N;
    static int M;
    static int V;
    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 int[N+1][N+1];    // 1부터 사용하기 위해 +1하여 배열 생성 (0~N-1이 아니라 1~N)

        // 간선의 개수만큼 반복문을 돌며 간선 정보 저장
        for (int i=0; i<M; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());

            // 간선이 양방향이기 때문에 [a][b]와 [b][a]를 모두 1로 저장
            arr[a][b] = arr[b][a] = 1;
        }

        visited = new boolean[N+1]; // 정점 방문 여부
        dfs(V);

        System.out.println();

        visited = new boolean[N+1]; // 정점 방문 여부 초기화 (dfs의 방문 여부가 저장되어 있기 때문에)
        bfs(V);        
    }

    static void dfs(int V) {

    }
    static void bfs(int V) {
        
    }
}

2. dfs

// 깊이 우선 탐색 : DFS
    static void dfs(int v) {
        visited[v] = true;  // 방문 여부 true로 변경하고
        System.out.print(v + " ");  // 출력

        // 정점의 개수만큼 반복문을 돌며 v정점과 다른 정점간의 간선 유무, 방문 여부 확인
        for(int i=1; i<=N; i++) {
            if (arr[v][i] == 1 && visited[i] == false) {
                dfs(i); // 간선이 존재하고 방문하지 않은 정점이면 해당 정점으로 재귀호출
            }
        }
    }

3. bfs

// 너비 우선 탐색 : BFS
    static void bfs(int v) {
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(v);   // queue에 정점 추가
        visited[v] = true;  // 방문 여부 true로 변경하고
        System.out.print(v + " ");  // 출력

        // queue가 빌 때 까지 반복문을 돌며 간선 유무, 방문 여부 확인
        while(!queue.isEmpty()) {
            int temp = queue.poll();    // queue에서 꺼낸 정점을 temp에 대입
            
            // 정점의 개수만큼 반복문을 돌며 temp정점과 다른 정점의 간선 유무, 방문 여부 확인
            for (int i=1; i<=N; i++) {
                if (arr[temp][i] == 1 && visited[i] == false) {
                    // 간선이 존재하고 방문하지 않은 정점이면
                    queue.add(i);   // 해당 정점을 queue에 넣고
                    visited[i] = true;  // 방문여부를 true로 변경
                    System.out.print(i + " ");  // 출력
                }
            }
        }
    }
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[BOJ] 백준 1929번 : 소수 구하기 - Java  (1) 2024.12.23
[BOJ] 백준 2751번 : 수 정렬하기 2 - Java  (1) 2024.12.20
[BOJ] 백준 2839번 : 설탕 배달 - Java  (0) 2024.12.19
[BOJ] 백준 1463번 : 1로 만들기 - Java  (0) 2024.12.18
[BOJ] 백준 11726번 : 2×n 타일링 - Java  (0) 2024.09.09
'Algorithm Solving/Java' 카테고리의 다른 글
  • [BOJ] 백준 1929번 : 소수 구하기 - Java
  • [BOJ] 백준 2751번 : 수 정렬하기 2 - Java
  • [BOJ] 백준 2839번 : 설탕 배달 - Java
  • [BOJ] 백준 1463번 : 1로 만들기 - Java
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    백트래킹
    백준
    programmers
    GROUP BY
    시뮬레이션
    DFS
    자료구조
    Firebase
    BOJ
    greedy
    websocket
    Subquery
    java
    HTML
    프로그래머스
    jwt
    그리디
    BFS
    jQuery
    CSS
    dp
    완전탐색
    sql
    bootstrap
    다이나믹프로그래밍
    javascript
    Google Fonts
    mysql
    join
    jpa
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[BOJ] 백준 1260번 : DFS와 BFS - Java
상단으로

티스토리툴바