JS求解数独算法

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)
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

CentOS6.7 i686上安装JDK7

内核版本:root@heima01javaunameaLinuxheima012.6.32573.el6.i6861SMPThuJul2312:37:35UTC2015i686i686i386GNU/Linux发行版本:root@heima01java

Android So动态加载 优雅实现与原理分析

背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我