개발 공부 기록
Published 2022. 3. 6. 19:18
백준 1260 자바 풀이 알고리즘/백준
728x90

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

DFS, BFS를 인접리스트로 푸는 방법을 알아보려고 한다.

 

인접 리스트로 나타내기 위해서는 ArrayList 형식의 배열을 정점만큼 만들어, ArrayList에 해당 정점과 연결된 다른 정점을 넣으면 된다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class bj1260 {

    static ArrayList<Integer>[] lists;
    static int N, M;
    static boolean[] visit;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        //N은 정점 개수, M은 간선 개수
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        int start = Integer.parseInt(st.nextToken());

        lists = new ArrayList[N + 1];
        visit = new boolean[N + 1];

        for (int i = 1; i <= N; i ++) {
            lists[i] = new ArrayList<>();
        }

        for(int i = 0; i < M; i ++) {
            st = new StringTokenizer(br.readLine());
            int from = Integer.parseInt(st.nextToken());
            int to = Integer.parseInt(st.nextToken());

            lists[from].add(to);
            lists[to].add(from);
        }

        for(int i = 1; i <= N; i ++) {
            Collections.sort(lists[i]);
        }

        DFS(start);

        Arrays.fill(visit, false);
        System.out.println();

        BFS(start);

    }

    private static void BFS(int v) {
        Queue<Integer> q = new LinkedList<>();

        q.offer(v);
        visit[v] = true;

        while (!q.isEmpty()) {
            int node = q.poll();
            System.out.print(node + " ");

            for(int i = 0; i < lists[node].size(); i ++) {
                int cur = lists[node].get(i);
                if(!visit[cur]) {
                    q.offer(cur);
                    visit[cur] = true;
                }
            }
        }
    }

    private static void DFS(int v) {
        System.out.print(v + " ");
        visit[v] = true;

        for(int i = 0; i < lists[v].size(); i ++){
            int cur = lists[v].get(i);
            if(!visit[cur]) DFS(cur);
        }
    }
}

 

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 1303 자바 풀이  (0) 2022.03.10
백준 2501 자바 풀이  (0) 2022.03.08
백준 11279 자바 풀이  (0) 2022.03.08
백준 1697 자바 풀이  (0) 2022.03.08
백준 2620 자바 풀이  (0) 2022.03.06
profile

개발 공부 기록

@찐만두

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!