javascript
c语言数独合法验证,JavaScript数独验证
Js數獨驗證
image.png
在網上看到一道數獨驗證的題。
數獨游戲是在一個9*9的方格中進行填數字的游戲,需要滿足的規則是每行每列和每個子九宮格都是1~9的不重復數字
需要完成的:給定一個九項的二維數組,用代碼確認九宮格的填寫是否符合數獨規則;
例如:
var board = [
[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]
]
validSolution(board);
=>true
我的想法是,既然每行每列每個子九宮格都是1~9的不重復數字,也就是說只要判斷這三個條件滿足和為45就好了;
var equals = function(number){
return n==45;
}//判斷結果是否為45
很明顯 board有9行9列 判斷9行需要一次遍歷 判斷9列又需要一次,看起來有點麻煩。
我們可以把行的和列的相加結果放在數組里,最后遍歷兩個數組來進行判斷。
var validSolution = function(board){
var rows = [0,0,0,0,0,0,0,0,0];
var columns = [0,0,0,0,0,0,0,0,0];
for(var i=0;i<9;i++){
//i表示行 j表示列
for(var j=0;j<9;j++){
rows[i]+=board[i][j];
columns[j]+=board[i][j];
}
}
}
很簡單的 rows和columns里就有了前兩個條件的數據,接下來是第三個條件
每個九宮格的和都是45
找一下子格在二維數組的規律
01 02 03
11 12 13
21 22 23
沒找到,再來一個
04 05 06
14 15 16
24 25 26
可以看出,小格是以三行或者三列為一個單位的,小格的相加數可以組成一個二維數組
[[0,0,0],[0,0,0],[0,0,0]]
于是,第三個條件也可以做了
var osums = [[0,0,0],[0,0,0],[0,0,0]];
for(var i=0;i<9;i++){
for(var j=0;j<9;j++){
osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j];
}
}
與上面的整合起來就是
var equals = function(number){
return number==45;
}//判斷結果是否為45
var validSolution = function(board){
var rows = [0,0,0,0,0,0,0,0,0];
var columns = [0,0,0,0,0,0,0,0,0];
var osums = [[0,0,0],[0,0,0],[0,0,0]];
for(var i=0;i<9;i++){
//i表示行 j表示列
for(var j=0;j<9;j++){
rows[i]+=board[i][j];
columns[j]+=board[i][j];
osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j];
}
}
for (var i=0;i<3;i++) if (!osums[i].every(equals)) return false;
return (rows.every(equals) && columns.every(equals));
}
這樣的結果是可以通過我們上面例子的驗證的 但是...(下回更)
總結
以上是生活随笔為你收集整理的c语言数独合法验证,JavaScript数独验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat运行问题解决方法
- 下一篇: 初学JSP+Servlet常见的错误