1function getNext(board){ 2 var result=null; 3 for(let i=0;i<9;i++){ 4 if(!result){ 5 for(let j=0;j<9;j++){ 6 if(board[i][j]=='.' && !result){ 7 result={x:i,y:j}; 8 } 9 } 10 } 11 } 12 return result 13} 14 15function check(board,row,col,k){ 16 let result=true; 17 if(board[row].find(item=>item==k)){ 18 result=false 19 } 20 for(var i=0;i<9;i++){ 21 if(board[i][col]==k){ 22 result=false; 23 } 24 } 25 let _areai=Math.floor(row/3)*3 26 let _areaj=Math.floor(col/3)*3 27 for(let _i=0;_i<3;_i++){ 28 for(let _j=0;_j<3;_j++){ 29 if(board[_areai+_i][_areaj+_j]==k){ 30 result=false; 31 } 32 } 33 } 34 return result; 35} 36 37function solveSudoku(board) { 38 let next=getNext(board); 39 if(!next){ 40 return 'success' 41 }else{ 42 let {x,y}=next; 43 for(var k=1;k<10;k++){ 44 if(check(board,x,y,k+'')){ 45 board[x][y]=k+''; 46 let flag=solveSudoku(board) 47 if(flag=='success'){ 48 console.log(board); 49 }else if(flag=='error'){ 50 board[x][y]='.' 51 } 52 } 53 } 54 if(board[x][y]=='.'){ 55 return 'error' 56 } 57 58 } 59}; 60 61var testData=[ 62 ["5","3",".",".","7",".",".",".","."], 63 ["6",".",".","1","9","5",".",".","."], 64 [".","9","8",".",".",".",".","6","."], 65 ["8",".",".",".","6",".",".",".","3"], 66 ["4",".",".","8",".","3",".",".","1"], 67 ["7",".",".",".","2",".",".",".","6"], 68 [".","6",".",".",".",".","2","8","."], 69 [".",".",".","4","1","9",".",".","5"], 70 [".",".",".",".","8",".",".","7","9"] 71] 72solveSudoku(testData)
JS求解数独算法
Wesley13
2021-10-11
1111 0 0
点赞
收藏
评论区
加载中...