首页 > 开发 > Java > 正文

Java如何实现解数独的小程序

2024-07-13 09:53:00
字体:
来源:转载
供稿:网友

Java如何实现解数独的小程序?数独相信很多人都玩过,趣味性很强,十分的耐玩。可有没有程序员想过玩实现一个数独布局的算法呢?算法是个很有意思,很神奇的东西。

算法如下,需要预先给出几个固定的值,目前解决的一个最难的数独是大概26个已知值的情况,理论上应该能解决任意已知值的数独,不过不知道会不会迭代栈溢出……因为在26个已知值的情况下就迭代了3000多次了,囧~~~

结果显示如下:

这是已知值:

1 1 21 4 8 1 5 51 6 11 7 71 8 32 1 12 2 62 4 43 5 93 7 83 8 44 7 95 8 76 1 36 6 86 7 46 8 67 3 77 6 47 7 18 3 38 6 79 3 49 4 69 7 39 8 2

(PS:如9 8 2表示第9行第二列的值是2)

将上面的数字保存到num.txt文件中,再把底下附的源代码保存为Sudoku.java。

然后在cmd命令行模型下输入:

javac Sudoku.java java Sudoku 

即可得到结果。

这个解法是我之前看到八皇后排列问题的解法后结合应用的,在数独中采用了这种解法,不过应该算是比较暴力的拆解,所以我后面命名成violentBreak。。。

虽然只是一个很小的事,但是能尝试着用编程去解决日常遇到的事,突然觉得很开心,学以致用!

java源代码:

import java.lang.System.*; import java.util.ArrayList; import java.util.Scanner;   /**This class named Sudoku can auto calculate Sudoku but *you should input some nums which are already known. *For instance: *1 5 3 *2 4 7 *There two rows means [1][5]=3 [2][4]=7 *i.e. In row 1 col 5 is value:5 *you can write all known num into one txt file *and input into this program . *such as java Sudoku [][] availableNum=new ArrayList[10][10];  private int[][] correctNum=new int[10][10];  private Scanner scan=new Scanner(System.in);  private int countNum=0;     {   for(int i=0;i();    }   }    for(int row=1;row1)           break outer;         }        }       }      }      if(count==1 && itemp!=0){       insert(itemp,jtemp,z);      }     }         }   }  }        //判断数独的矩阵是否填满,没有则继续  public boolean judgeMatrixFull(){   for(int i=1;i

总结

以上就是Java如何实现解数独的小程序的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表