알고리즘/그래프 탐색

백준 1012번 - 유기농 배추 (코틀린, kotlin)

의탕 2020. 11. 6. 17:23

이번 문제는 간단하게 bfs로 접근할수 있었다.

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


val dx = arrayListOf<Int>(0, 1, 0, -1)
val dy = arrayListOf<Int>(1, 0, -1, 0)

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val case = readLine().toInt()

    repeat(case) {
        val (M, N, K) = readLine().split(" ").map { it.toInt() }
        val graph = Array(M) { Array(N) { 0 } }
        var answer = 0

        //배추위치찍기
        repeat(K) {
            val (x, y) = readLine().split(" ").map { it.toInt() }
            graph[x][y] = 1
        }

        fun bfs(x: Int, y: Int) {
            var queue = LinkedList<Pair<Int, Int>>()
            queue.offer(Pair(x, y))
            while (!queue.isEmpty()) {
                var cur = queue.poll()

                for (d in 0..3) {
                    val nx = cur.first + dx[d]
                    val ny = cur.second + dy[d]

                    if (nx < 0 || nx >= M || ny < 0 || ny >= N || graph[nx][ny] != 1) continue
                    graph[nx][ny] = 2
                    queue.offer(Pair(nx, ny))
                }
            }

        }

        for (i in 0 until M) {
            for (j in 0 until N) {
                if (graph[i][j] == 1) {
                    bfs(i, j)
                    answer++
                }
            }
        }
        println(answer)
    }
}

앞으로 그래프 문제를 대강 10문제 정도만 풀어보고 다른 알고리즘으로 넘어가야겠다

 

궁금한 사항이 있다면 댓글로 문의해주세요

알고있다면 지식선에서, 모르겠다면 검색해서라도 열심히 답변해드리겠습니다