01
13
๋ฐ˜์‘ํ˜•

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

 

1260๋ฒˆ: DFS์™€ BFS

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ

www.acmicpc.net


    static int cnt = 0;
    // ๋งํ•œ ์ฝ”๋“œ
    public static void dfs(int[][] map, boolean[] visited, int v){
        // v ํ–‰๋ถ€ํ„ฐ ๋ณด๋ฉด ๋  ๊ฒƒ.
        System.out.print(v+" ");
        int newV = 0;
        for(int i=0; i<map.length; i++){
            if(map[v][i] == 1 & !visited[i]){
                visited[i] = true;
                newV = i;
                cnt++;
                break;
            }
        }
        if(cnt != map.length){
            dfs(map, visited, newV);
        }
    }

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

BFS๋Š” ๊ทธ๋ž˜๋„ ํ๋ฅผ ์“ฐ๋ฉด์„œ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, DFS๋ฅผ ๊ตฌํ˜„ ํ•  ๋•Œ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„์ง ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ง„๋‹ค. ๋ฐ˜๋ณต์œผ๋กœ ์ต์ˆ™ํ•ด์ง€๋Š” ์ˆ˜ ๋ฐ–์— ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋˜ ์ด๋ฒˆ์— ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ, ์žฌ๊ท€๋ฅผ ์“ฐ๋ ค๋ฉด ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒŒ ํŽธํ•˜๊ธฐ๋„ ํ•˜๊ณ , ํ•จ์ˆ˜๋กœ ๋นผ๋‚ผ ๊ฑฐ๋ฉด ์ธ์ˆ˜๋กœ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋ง๊ณ  ์ „์—ญ์œผ๋กœ ์„ ์–ธํ•ด์„œ ์ดˆ๊ธฐํ™”๋งŒ ์ž˜ ํ•ด์ฃผ๋ฉด ๋” ํŽธํ•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

DFS๋Š” ๊ณ„์† ํƒ€๊ณ  ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๊ณ , BFS๋Š” ์ธ์ ‘ํ•œ ๊ฑฐ ๋‹ค ์ฑ™๊ธฐ๋ฉด์„œ ํ•˜๋‚˜ ๋ฝ‘์„ ๋•Œ ์ธ์ ‘ํ•œ ๊ฑฐ ๋‹ค ์ฑ™๊ธฐ๊ณ  ๋„˜์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ๋งŒ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋˜๊ฒ ๋‹ค. DFS๋Š” ๊ทธ๋ž˜์„œ Stack์œผ๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ๋ฐ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ํ•œ๋ฒˆ ๋„์ „ํ•ด๋ด์•ผ๊ฒ ๋‹ค.


์ •๋‹ต์ฝ”๋“œ

import java.sql.Array;
import java.util.*;
import java.io.*;

public class Main
{
    static int n, m, v;
    static int[][] map;
    static boolean[] visited; // ์ „์—ญ์œผ๋กœ ์“ฐ๋Š” ์ด์œ ๋Š” ํ•จ์ˆ˜์—์„œ ๋‹ค ๊ฐ–๋‹ค ์“ฐ๋ ค๊ณ 

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

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        v = sc.nextInt();

        Queue<Integer> q = new LinkedList<>();
        map = new int[n+1][n+1]; // ์ •์  ๊ฐœ์ˆ˜ ๋งŒํผ map
        visited = new boolean[n+1];

        // ์ธ์ ‘ํ–‰๋ ฌ์— ๊ฐ’ ๋„ฃ๊ธฐ, ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ž„.
        for(int i=0; i<m; i++){
            int src = sc.nextInt();
            int dst = sc.nextInt();
            map[src][dst] = 1;
            map[dst][src] = 1;
        }
        // DFS
        dfs(v);
        System.out.println();
        visited = new boolean[n+1]; // ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์ดˆ๊ธฐํ™”ํ•˜๊ธฐ
        // BFS
        q.offer(v);
        while(!q.isEmpty()){
            int node = q.poll();
            visited[node] = true;
            System.out.print(node+" ");
            for(int i=1; i<=n; i++){
                if(map[node][i] == 1 & !visited[i]){
                    q.offer(i);
                    visited[i] = true; // ๋„ฃ์œผ๋ฉด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ๋จ. ์•ˆํ•˜๋ฉด ๋˜‘๊ฐ™์€ ์ •์ ์ด ์ค‘๋ณต์œผ๋กœ ์ถ”๊ฐ€ ๋จ
                }
            }
        }
    }
}

 

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT