How to search for a word in a grid of characters with Kotlin

1 Answer

0 votes
// Use a depth‑first search (DFS) from every cell that matches the first letter,
// exploring all valid directions until the full word is matched.

fun dfs(
    grid: Array<Array<Char>>,
    visited: Array<BooleanArray>,
    r: Int,
    c: Int,
    word: String,
    index: Int
): Boolean {

    if (index == word.length)
        return true

    val rows = grid.size
    val cols = grid[0].size

    if (r !in 0 until rows || c !in 0 until cols)
        return false

    if (visited[r][c])
        return false

    if (grid[r][c] != word[index])
        return false

    visited[r][c] = true

    val found =
        dfs(grid, visited, r + 1, c, word, index + 1) ||
        dfs(grid, visited, r - 1, c, word, index + 1) ||
        dfs(grid, visited, r, c + 1, word, index + 1) ||
        dfs(grid, visited, r, c - 1, word, index + 1)

    visited[r][c] = false
    
    return found
}

fun wordExist(grid: Array<Array<Char>>, word: String): Boolean {
    val rows = grid.size
    val cols = grid[0].size

    val visited = Array(rows) { BooleanArray(cols) }

    for (r in 0 until rows) {
        for (c in 0 until cols) {
            if (dfs(grid, visited, r, c, word, 0))
                return true
        }
    }

    return false
}

fun main() {
    val grid = arrayOf(
        arrayOf('a', 'b', 'c', 'e'),
        arrayOf('s', 'f', 'c', 's'),
        arrayOf('a', 'd', 'e', 'e')
    )

    val word = "see"

    val result = wordExist(grid, word)
    println(if (result) 1 else 0)
}



/*
run:

1

*/

 



answered 2 days ago by avibootz
...