import java.io.*; import java.util.*; // To execute Kotlin code, please define a top level function named main fun main() { val matrix = Array(5) { IntArray(5) { 0 } } matrix[0][1] = 1 matrix[1][2] = 1 matrix[1][4] = 1 matrix[3][2] = 1 matrix[4][3] = 1 (0..4).forEach { id -> println("id=$id, output=${Solution().affectedCells(id, matrix)}") } // 0 -> 1 -> 4 -> 3 // |--> 2 <--| // ex: 0 -> 0, 1, 4, 3, 2 // ex: 1 -> 1, 4, 3, 2 // ex: 2 -> 2 // ex: 3 -> 3, 2 // ex: 4 -> 4, 3, 2 // matrix // 0 1 2 3 4 // 0 0 1 0 0 0 // 1 0 0 1 0 1 // 2 0 0 0 0 0 // 3 0 0 1 0 0 // 4 0 0 0 1 0 } data class Cell(val id: Int) class Solution() { fun affectedCells(id: Int, matrix: Array): List { val dependents = (0 until matrix.size).filter { j -> matrix[id][j] == 1 } return (if (dependents.isNotEmpty()) { val unflattened = dependents .map { dependent -> affectedCells(dependent, matrix) } unflattened.flatten() } else { listOf() } + id).distinct() } fun print(matrix: Array) { matrix.forEach { row -> println(row.contentToString()) } } }