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

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.

object WordSearch {

  def dfs(
      grid: Array[Array[Char]],
      visited: Array[Array[Boolean]],
      r: Int,
      c: Int,
      word: String,
      index: Int
  ): Boolean = {

    if (index == word.length)
      return true

    val rows = grid.length
    val cols = grid(0).length

    if (r < 0 || c < 0 || r >= rows || c >= 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
    found
  }

  def wordExist(grid: Array[Array[Char]], word: String): Boolean = {
    val rows = grid.length
    val cols = grid(0).length

    val visited = Array.fill(rows, cols)(false)

    (0 until rows).exists { r =>
      (0 until cols).exists { c =>
        dfs(grid, visited, r, c, word, 0)
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val grid = Array(
      Array('a', 'b', 'c', 'e'),
      Array('s', 'f', 'c', 's'),
      Array('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
...