求解数独回溯算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了求解数独回溯算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1652字,纯文字阅读大概需要3分钟。
内容图文
实现的java代码如下:
// 判断a[i][j]取值val是否有效 public boolean isValid(int[][] a, int i, int j, int val){ //判断是否跟同行冲突for(int j1=0;j1<9;j1++){ if(a[i][j1]==val) returnfalse; } //判断是否跟同列冲突for(int i1=0;i1<9;i1++){ if(a[i1][j]==val) returnfalse; } //找出a[i][j]所在的九宫格int i1 = 0, j1 = 0; boolean flag = true; for(i1=0;i1<3&&flag;i1++){ if(!(i>=i1*3&&i<3*(i1+1))) continue; for(j1=0;j1<3;j1++){ if(j>=j1*3&&j<3*(j1+1)){ flag = false; break; } } } i1--; //判断值是否跟所在九宫格冲突for(int i2=3*i1;i2<3*(i1+1);i2++){ for(int j2=3*j1;j2<3*(j1+1);j2++){ if(a[i2][j2]==val) returnfalse; } } returntrue; } //打印数独publicvoid printMatrix(int[][] a){ for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } //回溯法求解数独publicvoid shuDu(int[][] a, int i, int j){ if(i==8&&j>=9){ printMatrix(a); return; } if(j==9){ j=0; i++; } if(a[i][j]==0){ for(int k=1;k<=9;k++){ if(isValid(a,i,j,k)){ a[i][j] = k; //向下继续找 shuDu(a,i,j+1); //如果没有找到全部答案将a[i][j]的值恢复 a[i][j] = 0; } } }else{ shuDu(a,i,j+1); } }
算法调用示例如下:
public static void main(String[] args) { Solution solu = new Solution(); int ma1[][]={ {0,3,0,0,0,5,0,6,0}, {0,1,0,0,0,3,0,8,0}, {0,4,0,0,0,0,0,0,7}, {0,0,7,0,2,4,0,0,0}, {5,0,0,0,9,0,0,0,0}, {0,8,0,3,0,0,5,0,0}, {0,0,0,8,0,0,0,0,0}, {0,0,9,0,0,0,0,7,3}, {0,5,0,9,0,0,0,0,2}}; int[][] sudoku = { {8,0,0,0,0,0,0,0,0}, {0,0,3,6,0,0,0,0,0}, {0,7,0,0,9,0,2,0,0}, {0,5,0,0,0,7,0,0,0}, {0,0,0,0,4,5,7,0,0}, {0,0,0,1,0,0,0,3,0}, {0,0,1,0,0,0,0,6,8}, {0,0,8,5,0,0,0,1,0}, {0,9,0,0,0,0,4,0,0}}; solu.shuDu(sudoku, 0, 0); }
原文:http://www.cnblogs.com/gaopeng527/p/4873447.html
内容总结
以上是互联网集市为您收集整理的求解数独回溯算法全部内容,希望文章能够帮你解决求解数独回溯算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。