How to change all elements of row i and column j in a binary matrix to 0 if cell[i, j] is 0 in Kotlin

1 Answer

0 votes
fun changeRowColumn(matrix: Array<IntArray>, row: Int, col: Int) {
    val rows = matrix.size
    val cols = matrix[0].size

    for (j in 0 until cols) {
        if (matrix[row][j] != 0) {
            matrix[row][j] = -1
        }
    }

    for (i in 0 until rows) {
        if (matrix[i][col] != 0) {
            matrix[i][col] = -1
        }
    }
}

fun changeBinaryMatrix(matrix: Array<IntArray>) {
    val rows = matrix.size
    if (rows == 0) return
    val cols = matrix[0].size
    if (cols == 0) return

    // First pass: record zero positions
    val zeroPositions = mutableListOf<Pair<Int, Int>>()
    for (i in 0 until rows) {
        for (j in 0 until cols) {
            if (matrix[i][j] == 0) {
                zeroPositions.add(Pair(i, j))
            }
        }
    }

    // Mark rows and columns based on zero positions
    for ((i, j) in zeroPositions) {
        changeRowColumn(matrix, i, j)
    }

    // Second pass: clean up
    for (i in 0 until rows) {
        for (j in 0 until cols) {
            if (matrix[i][j] == -1) {
                matrix[i][j] = 0
            }
        }
    }
}

fun printMatrix(matrix: Array<IntArray>) {
    for (row in matrix) {
        println(row.joinToString(" "))
    }
}

fun main() {
    val matrix = arrayOf(
        intArrayOf(1, 1, 0, 1, 1, 1),
        intArrayOf(1, 1, 1, 1, 1, 1),
        intArrayOf(1, 1, 0, 1, 1, 1),
        intArrayOf(1, 1, 1, 1, 1, 1),
        intArrayOf(1, 0, 1, 1, 1, 1)
    )

    changeBinaryMatrix(matrix)
    printMatrix(matrix)
}

 
  
/*
run:
  
0 0 0 0 0 0
1 0 0 1 1 1
0 0 0 0 0 0
1 0 0 1 1 1
0 0 0 0 0 0

*/

 



answered Jul 5 by avibootz
...