본문 바로가기

알고리즘/백준 문제풀이

백준 1260-DFS와 BFS(Kotlin)

728x90

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

문제 접근

기본적으로 dfs와 bfs를 구현하는 문제입니다.

처음 dfs와 bfs를 연습할때 구현하는 방법을 연습하기 좋아보입니다.

 

정답코드

import java.util.*
var node = 0
var g = Array(node+1){ArrayList<Int>()}
val check = BooleanArray(1001)
var que: Queue<Int> = LinkedList()
//graph : 인접리스트로 구현
fun main(args: Array<String>): Unit = with(Scanner(System.`in`)) {
    node = nextInt()
    val edge = nextInt()
    val start = nextInt()

    g = Array(node+1){ArrayList<Int>()}
    for (i in 1..node){
        g[i] = ArrayList()
    }
    //입력된 값 그래프에 연동
    for (i in 0 until edge){
        val a = nextInt()
        val b = nextInt()
        graph(a,b)
    }
    dfs(start)
    check.fill(false)
    println()
    bfs(start)

}
fun graph(i : Int, j:Int){
    //방향, 가중치 없음
    g[i].add(j)
    g[j].add(i)
}
//재귀
fun dfs(start:Int){
    check[start] = true
    print("$start ")
    for (i in 1..node){
        if (g[start].contains(i) && !check[i]){
            dfs(i)
        }
    }
}
//큐
fun bfs(start:Int){
    check[start] = true
    que.add(start)
    while (!que.isEmpty()){
        val start = que.poll()
        print("$start ")

        for (i in 1..node){
            if (g[start].contains(i) && !check[i]){
                check[i] = true
                que.add(i)
            }
        }
    }

}