Java基于二维数组实现的数独问题示例
本文实例讲述了Java基于二维数组实现的数独问题。分享给大家供大家参考,具体如下:
这里利用Java二维数组实现数独问题。
(1)生成简易数独
(2)生成数独问题**
代码
importjava.util.Random;
importjava.util.ArrayList;
publicclassSuduku{
/**
*打印二维数组,数独矩阵
*/
publicstaticvoidprintArray(inta[][])
{
for(inti=0;i<9;i++){
for(intj=0;j<9;j++){
System.out.print(""+a[i][j]);
if(0==((j+1)%3)){
System.out.print("");
}
}
System.out.println();
if(0==((i+1)%3))
{
System.out.println();
}
}
}
/**
*产生一个1-9的不重复长度为9的一维数组
*/
publicstaticArrayListcreatNineRondomArray()
{
ArrayListlist=newArrayList();
Randomrandom=newRandom();
for(inti=0;i<9;i++){
intrandomNum=random.nextInt(9)+1;
while(true){
if(!list.contains(randomNum)){
list.add(randomNum);
break;
}
randomNum=random.nextInt(9)+1;
}
}
System.out.println("生成的一位数组为:");
for(Integerinteger:list){
System.out.print(""+integer.toString());
}
System.out.println();
returnlist;
}
/**
*通过一维数组和原数组生成随机的数独矩阵
*
*遍历二维数组里的数据,在一维数组找到当前值的位置,并把一维数组
*当前位置加一处位置的值赋到当前二维数组中。目的就是将一维数组为
*依据,按照随机产生的顺序,将这个9个数据进行循环交换,生成一个随
*机的数独矩阵。
*
*/
publicstaticvoidcreatSudokuArray(int[][]seedArray,ArrayListrandomList)
{
for(inti=0;i<9;i++){
for(intj=0;j<9;j++){
for(intk=0;k<9;k++){
if(seedArray[i][j]==randomList.get(k))
{
seedArray[i][j]=randomList.get((k+1)%9);
break;
}
}
}
}
System.out.println("处理后的数组");
Suduku.printArray(seedArray);
}
publicstaticvoidcreatSudokuQuestion(int[][]a)
{
Randomrand=newRandom();
for(inti=0;i<9;i++){
for(intj=0;j<4;j++){
a[i][(int)rand.nextInt(9)]=0;
}
}
Suduku.printArray(a);
}
//
publicstaticvoidmain(String[]args){
intseedArray[][]={
{9,7,8,3,1,2,6,4,5},
{3,1,2,6,4,5,9,7,8},
{6,4,5,9,7,8,3,1,2},
{7,8,9,1,2,3,4,5,6},
{1,2,3,4,5,6,7,8,9},
{4,5,6,7,8,9,1,2,3},
{8,9,7,2,3,1,5,6,4},
{2,3,1,5,6,4,8,9,7},
{5,6,4,8,9,7,2,3,1}
};
System.out.println("原始的二维数组:");
Suduku.printArray(seedArray);
ArrayListrandomList=Suduku.creatNineRondomArray();
Suduku.creatSudokuArray(seedArray,randomList);
System.out.println("生成数独问题:");
Suduku.creatSudokuQuestion(seedArray);
}
}
     
输出:
原始的二维数组: 978312645 312645978 645978312 789123456 123456789 456789123 897231564 231564897 564897231 生成的一位数组为: 239168754 处理后的数组 157963824 963824157 824157963 571639248 639248571 248571639 715396482 396482715 482715396 生成数独问题: 057963000 963000057 024107960 501609200 609200570 208071039 715006482 306482705 482700396
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。