You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin扫雷开发:如何统计矩阵目标单元格周边地雷数量?

扫雷相邻单元格地雷统计实现(Kotlin)

先纠正你代码里的几个明显问题:

  1. 内层循环j in 0 until i逻辑错误,应该遍历当前行的所有列,比如j in 0 until tablero[i].size(假设tablero是二维矩阵)
  2. 参数mines: Int没有实际作用,你需要传入存储地雷分布的二维数组tablero
  3. 定义的left、bottom等变量没必要,直接通过索引范围判断边界即可

核心逻辑是遍历目标单元格的8个相邻方向(上下左右+四个对角线),逐个检查每个方向的坐标是否在矩阵合法范围内,合法的话再判断是否是地雷,最后统计数量。

完整实现代码

// 假设tablero是存储地雷的二维数组:true表示该单元格有地雷,false表示无
fun countAdjacentMines(tablero: List<List<Boolean>>): List<List<Int>> {
    val totalRows = tablero.size
    if (totalRows == 0) return emptyList()
    val totalCols = tablero[0].size

    // 定义8个相邻方向的行、列偏移量
    val adjacentDirections = listOf(
        -1 to -1, -1 to 0, -1 to 1,
         0 to -1,          0 to 1,
         1 to -1,  1 to 0, 1 to 1
    )

    // 初始化结果矩阵,存储每个单元格的相邻地雷数
    val mineCountMatrix = MutableList(totalRows) { MutableList(totalCols) { 0 } }

    // 遍历每个单元格
    for (row in 0 until totalRows) {
        for (col in 0 until totalCols) {
            var adjacentMineCount = 0
            // 检查每个相邻方向
            for ((rowOffset, colOffset) in adjacentDirections) {
                val adjacentRow = row + rowOffset
                val adjacentCol = col + colOffset
                // 确保相邻坐标在矩阵边界内
                if (adjacentRow in 0 until totalRows && adjacentCol in 0 until totalCols) {
                    // 如果该相邻单元格是地雷,计数+1
                    if (tablero[adjacentRow][adjacentCol]) {
                        adjacentMineCount++
                    }
                }
            }
            mineCountMatrix[row][col] = adjacentMineCount
        }
    }
    return mineCountMatrix
}

关键细节说明

  • 方向偏移量:一次性列出所有8个可能的相邻位置,避免重复编写边界判断逻辑,代码更简洁易维护
  • 边界检查:通过adjacentRow in 0 until totalRows和adjacentCol in 0 until totalCols确保不会访问矩阵外的索引,避免数组越界异常
  • 适配不同存储类型:如果你的tablero是Int类型数组(比如1代表地雷,0代表空),只需要把判断条件改成tablero[adjacentRow][adjacentCol] == 1即可

内容的提问来源于stack exchange,提问作者Daniel Requena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:20:26