解一下数独题下载?

1、联除法。在并排的三个九宫格中的两排寻找相同数字,再利用九宫格得出另一排中该数字位置,该方法适用于中高级数独.2、巡格法找出在每个九宫格中出现频率较高的数字,得出该数字在其余九宫格内位置,该方法应用于方法一之后。3、排除法这个方法是解决问题的关键,易被常人所忽略。在各行列或九宫格中观察,若有个位置其它数字都不能填,就填余下的数字4、待定法此方法不常用却很有效。暂时确定某个数字在某个区域,再利用其来进行排除5、行列法此方法用于收官阶段,利用先从行列突破来提高解题效率。6、假设法即在某个位置随机的填上一个数字,再进行推演,并有可能最终产生矛盾而否定结论。7、频率法这种方法相比于上一种方法更能提高效率。在某一行列或九宫格列举出所有情况,再选择某位置中出现频率高的数字8、候选数法使用候选数法解数独题目需先建立候选数列表,根据各种条件,逐步安全的清除每个宫格候选数的不可能取值的候选数,从而达到解题的目的。扩展资料:数独的出题方法:1、挖洞法从有到无的出题方法。先生成一个终盘,然后挖去部分数字形成一道题目。2、填数法从无到有的出题方法。在一个空盘面上填上部分数字形成一道题目。2007年日本NPGenerator软件的网站提出了一种边推理边出题的出题法,可以手工打造出漂亮图案的数独题目。
输入:board = [["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"]]
输出:[["5","3","4","6","7","8","9","1","2"],["6","7","2","1","9","5","3","4","8"],["1","9","8","3","4","2","5","6","7"],["8","5","9","7","6","1","4","2","3"],["4","2","6","8","5","3","7","9","1"],["7","1","3","9","2","4","8","5","6"],["9","6","1","5","3","7","2","8","4"],["2","8","7","4","1","9","6","3","5"],["3","4","5","2","8","6","1","7","9"]]/**
Do not return anything, modify board in-place instead.
*/
function solveSudoku(board: string[][]): void {
const length: number = board.length // 感觉直接写9也没什么毛病 /笑哭
// 校验输入是否符合数独规则
const isSudoku: Function = (row: number, col: number, val: string): boolean => {
// 行、列判定
for (let z = 0; z < length; z++) {
if (board[row][z] === val) return false
if (board[z][col] === val) return false
}
// 3*3判定
const tempRow = Math.floor(row / 3) * 3, tempCol = Math.floor(col / 3) * 3
for (let a = tempRow; a < tempRow + 3; a++) {
for (let b = tempCol; b < tempCol + 3; b++) {
if (board[a][b] === val) return false
}
}
// 全部遍历完成即符合规则
return true
}
// 回溯
const backTracking: Function = (): boolean => {
for (let a = 0; a < length; a++) {
for (let b = 0; b < length; b++) {
// 题目中规定空白格用'.'表示
if (board[a][b] !== '.') continue
for (let val = 1; val <= 9; val++) {
// 传入的数独中是string,做转型处理-反单引号`${}`、toString()啥的都行
if (isSudoku(a, b, '' + val)) {
board[a][b] = '' + val
if (backTracking()) return true
board[a][b] = '.'
}
}
// 走到这里说明填1-9都不符合规则,通知上一层撤回操作
return false
}
}
// 全部执行完成
return true
}
backTracking()
};

我要回帖

更多关于 数独题下载 的文章