원본 문제 : https://www.acmicpc.net/problem/1012
참고 문제 : https://youjourney.tistory.com/124
<첫번째>
import java.io.*
import java.lang.System.*
var map: Array<IntArray> = arrayOf()
var visited: Array<BooleanArray> = arrayOf()
var cnt: Int = 0
var axis_x = 0
var axis_y = 0
var dx = arrayListOf<Int>(-1,1,0,0)
var dy = arrayListOf<Int>(0,0,-1,1)
fun main() = with(BufferedReader(InputStreamReader(`in`))) {
val list: MutableList<Int> = mutableListOf()
repeat(readLine().toInt()) {
val str = readLine().split(" ")
axis_x = (str[0]+"").toInt()
axis_y = (str[1]+"").toInt()
map = Array(axis_x, { IntArray(axis_y) })
visited = Array(axis_x, { BooleanArray(axis_y) })
for ( i in 0 until axis_x ){
for ( j in 0 until axis_y ){
map[i][j] = 0
visited[i][j] = false
}
}
for ( i in 0 until (str[2]+"").toInt() ) {
val coordinate = readLine().split(" ")
map[(coordinate[0]+"").toInt()][(coordinate[1]+"").toInt()] = 1
}
for (i in 0 until axis_x) {
for (j in 0 until axis_y) {
if (map[i][j] == 1 && visited[i][j] == false) {
cnt = 1
dfs(i, j)
list.add(cnt)
}
}
}
println(list.size)
list.clear()
}
}
fun dfs(x: Int, y: Int): Int {
visited[x][y] = true
for (i in 0 until 4) {
val nx = x + dx[i]
val ny = y + dy[i]
if (nx >= 0 && ny >= 0 && nx < axis_x && ny < axis_y) {
if (map[nx][ny]==1 && visited[nx][ny]==false) {
dfs(nx, ny)
cnt++
}
}
}
return cnt
}
<두번째> 2020/06/08
import java.io.BufferedReader
import java.io.InputStreamReader
var matrix: Array<IntArray> = arrayOf()
var visited: Array<BooleanArray> = arrayOf()
var mnk: IntArray = intArrayOf()
val dx = intArrayOf(1,-1,0,0)
val dy = intArrayOf(0,0,1,-1)
fun dfs(x: Int, y: Int) {
visited[x][y] = true
for (i in 0 until 4) {
val nx = x + dx[i]
val ny = y + dy[i]
if (nx in 0 until mnk[0] && ny in 0 until mnk[1]) {
if (matrix[nx][ny] != 0 && !visited[nx][ny]) {
dfs(nx, ny)
}
}
}
}
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
var cases: Int = readLine().toInt()
val list = mutableListOf<Int>()
repeat(cases) {
var cnt = 0
mnk = readLine()
.split(" ")
.map { it.toInt() }
.toIntArray()
matrix = Array(mnk[0]) { IntArray(mnk[1]) { 0 } }
visited = Array(mnk[0]) { BooleanArray(mnk[1]) { false } }
repeat(mnk[2]) {
val xy = readLine()
.split(" ")
.map { it.toInt() }
.toIntArray()
matrix[xy[0]][xy[1]] = 1
}
for (i in 0 until mnk[0]) {
for (j in 0 until mnk[1]) {
if (!visited[i][j] && matrix[i][j] != 0) {
cnt++
dfs(i, j)
}
}
}
list.add(cnt)
}
list.forEach { println(it) }
}
'코딩연습 > DFS&BFS' 카테고리의 다른 글
[백준] 단지번호붙이기 (2667)(Kotlin) (0) | 2020.01.20 |
---|
댓글