js解9*9数独

var fun = function(board) {
// 判断是否满足条件
    function check(x, y, n) {
        for(let i = 0;i < 9;i++) {
            if(board[x][i] == n || board[i][y] == n) {
                return false
            }
        }
        let xi = x - x % 3        //九宫格判断
        let yj = y - y % 3
        for(let i = xi;i < xi + 3;i++) {
            for(let j = yj;j < yj + 3;j++) {
                if(board[i][j] == n)
                return false
            } 
        }
        return true
    }

    function dg(x, y) {
        if(board[x][y] !== '.') {    // 不可修改项

                y++
                if(y > 8) {
                    y = 0
                    x++
                }

            if(x > 8) {
                return true  // 数独填完
            } else {
                return dg(x,y)
            }
        } else {
            for(let i = 1;i <= 9;i++) {
                if(check(x, y, ''+i)) {
                    board[x][y] = i + ''
                        y++          
                        if(y > 8) {       // 换行
                            y = 0
                            x++
                        }
                    if(x > 8) {
                        return true   // 数独填完
                    } else {
                        if(!dg(x,y)) {
                            y--     、、回退一格
                            if(y < 0) {    // 回退至上一格
                                x--
                                y = 8
                            }
                            if(x < 0) {
                                return true
                            }
                            board[x][y] = '.'    // 清除状态
                        } else {
                            return true   // 数独已填完,正在结束递归
                        }
                    }
                }
            }
            return false    // 回退,重新填数据
        }
    }
    dg(0,0)
    return board
}
console.log(fun([
    ["5","3",".",".","7",".",".",".","."],
    ["6",".",".","1","9","5",".",".","."],
    [".","9","8",".",".",".",".","6","."],
    ["8",".",".",".","6",".",".",".","3"],
    ["4",".",".","8",".","3",".",".","1"],
    ["7",".",".",".","2",".",".",".","6"],
    [".","6",".",".",".",".","2","8","."],
    [".",".",".","4","1","9",".",".","5"],
    [".",".",".",".","8",".",".","7","9"]
]
  ))

你可能感兴趣的:(js解9*9数独)