[백준] 1260_dfs와 bfs (Java)

강민수·2023년 7월 27일

Algorithm-BACKJOON

목록 보기
40/55
post-thumbnail

문제

문제 바로가기

풀이 코드

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 StringTokenizer st;
    static int n; // 정점의 개수
    static int m; // 간선의 개수
    static int v; // 탐색 시작점
    static int[][] graph;
    static boolean[] visited;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        v = Integer.parseInt(st.nextToken());
        graph = new int[n + 1][n + 1];

        for (int i = 1; i <= m; i++) {
            st = new StringTokenizer(br.readLine());
            int s = Integer.parseInt(st.nextToken());
            int e = Integer.parseInt(st.nextToken());
            graph[s][e] = 1;
            graph[e][s] = 1;
        }

        visited = new boolean[n + 1];
        dfs(v);
        System.out.println();
        visited = new boolean[n + 1];
        bfs(v);

    }

    static void dfs(int start) {
        System.out.print(start + " ");
        visited[start] = true;
        for (int i = 1; i <= n; i++) {
            if (graph[start][i] == 1 && !visited[i]) {
                dfs(i);
            }
        }
    }

    static void bfs(int start) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(start);
        visited[start] = true;
        while (!queue.isEmpty()) {
            int node = queue.poll();
            System.out.print(node + " ");
            for (int i = 1; i <= n; i++) {
                if (graph[node][i] == 1 && !visited[i]){
                    visited[i] = true;
                    queue.offer(i);
                }
            }
        }
    }
}

단순 bfs와 dfs문제여서 구현을 해보았는데 bfs에서 뭔가 코드가 찝찝한 느낌?... while문을 돌면서도 for문으로 확인을 하는데 뭔가 맘에 안드는 코드... 다른 분들 코드를 참고하고 스터디에서 코드리뷰를 받아본 후에 피드백을 반영해서 다시 고쳐야겠다 !!

profile
능동적으로 개발 지식을 찾아다니는 백엔드 개발자입니다 😊 작성된 글에 대한 질문들 및 피드백은 언제나 환영입니다 :) 👌

0개의 댓글