第一个android程序——数独

最近学习java开发,就编写第一个android程序 数独。一、先了解一下数独规则:9行9列,共81个小方格每个小方格只能填1-9个数字每一行数字不能重复,每一列数字不能重复,每一个小的九宫格也不能重复二、设计思路:1. 先生成一个完整的数独,并保存在一个二维数组中2. 随机把n个小方格的值清空,二维数组对应小方格对应的值填03. 画图,绘制一个9行9列(共81个小方格),并根据二维数组绘制文本,0值绘制文本为空字符串4. 选中小方格时,如果原始就有数字,则不做任何操作;否
摘要由CSDN通过智能技术生成

最近学习java开发,就编写第一个android程序 数独。

一、先了解一下数独规则:

  1. 9行9列,共81个小方格

  2. 每个小方格只能填1-9个数字

  3. 每一行数字不能重复,每一列数字不能重复,每一个小的九宫格也不能重复

二、设计思路:

1. 先生成一个完整的数独,并保存在一个二维数组中
2. 随机把n个小方格的值清空,二维数组对应小方格对应的值填0
3. 画图,绘制一个9行9列(共81个小方格),并根据二维数组绘制文本,0值绘制文本为空字符串
4. 选中小方格时,如果原始就有数字,则不做任何操作;否则改变被选中的小方格背景色,
   可对该方格填写1-9个的任何个数字
6. 验证填写的数字,行、列、小九宫格是否重复;若不重复,绘制该文本,否则予以提示

三、设计步骤及关键代码

  1. 创建一个数独类 DrawShuduku,该类主要作用是生成数独且验证填写值是否正确

    声明一个二维数组,9行9列

    	private final int ROWS=9; //九宫格行数
    	private final int COLS=9; //九宫格列数
    
        private int[][] currentArray;
        private int[][] resultArray;
    

    采用回溯方法,给每个小方格随机填写1-9(每一小方格都尝试填写),最终输出一个完整的数独二维数组,这个是本次的核心代码。

    定义一个方法backTrackShuduku(int n),n从0开始,也就是第一行第一列(第一个小方格)

    每个小方格都会尝试填写1-9的数字(随机填写),每个小方格都尝试9次(foreach循环),如果验证该数字不合法,则把该数字剔除,继续执行foreach下一个,

    尝试填写其他数字,满足就填写该值 并 执行 backTrackShuduku(n+1),不满足就剔除该数字,以此类推填写后面的空格。

    注意:不管所填写的数字是否合法,都需要把该foreach执行完。

    n=81时,即所有空格都填满,则验证该数独合法性(数字是否有重复);如果是一个完整且合法的数独,则拷贝到另一个二维数组。

    因为,此时,递归函数还没有执行完,会继续尝试填写其他数字,因为每一个小方格都会填写1-9共九次

        /**
         * 采用回溯方法,给每个单元格尝试1-9填值
         * @param n 目前需要填写的第n个单元格
         */
        private void backTrackShuduku(int n){
            if(n==81){
                //如果都已经填满,则校验填充的值是否都正确
                for(int row=0;row<ROWS;row++){
                    for(int col=0;col<COLS;col++){
                        int value=currentArray[row][col];
                        if(value==0 || !isValid(row,col,value,currentArray)){
                            return;
              
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值