`
tang&qiang
  • 浏览: 25458 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

4: 随机 数独 生成代码

阅读更多
本例 数独 的生成 全部 采用 随机的 方法
故 生成时间的长短 全靠运气了。。。



/**
* 随机数独的生成
* @author Administrator
*
*/
public class shudu {
private static int[][] AB=new int[10][9];
static int c = 0;//计数器c  用来 判断输入数字是否完毕
static int d = 0;// 计数器d  用来 间隔 数字输入
static int J=0;


/*
* 程序入口
*/
public static void main(String args[]){
shudu SHU=new shudu();

while(c==0 ){
int b1=0;
int b2=0;
int b3=0;
//随机取一个位置
java.util.Random ran=new java.util.Random();
int A=ran.nextInt(9);
int B=ran.nextInt(9);
// 判断位置上 是否存在 数
if(AB[A][B]==0){
d++;
//传入一个随机数
SHU.Chuan(A,B);
// 三次判断
b1=SHU.Heng(A,B,0);
b2=SHU.Shu(A,B,0);
b3=SHU.Xiao(A,B,0);

if (b1==1 || b2==2||b3==3){
AB[A][B]=0;
}
//  令 计数器 c=1;
c=1;
for(int i=0;i<=8;i++){
for(int j=0;j<=8;j++){
if(AB[i][j]==0){
//如若 全部 填满数字   则结束输入数字
c=0;
}
}
}
}
//用 200 次的随机取数 作为间隔   每200次即改2个数为0
if(d==200){
J++;
System.out.println("  共   到  200 了    " + J + "  次");
//在无法继续运算的情况下  随机的取出   2  个位置的数 使之为0;

//此处 i<2  经验证后 比较稳定   。。。。。
//平均输入 70000左右的数字时 就可成功。。。。。
for(int i=0;i<2;i++){
int A1=ran.nextInt(9);
int B1=ran.nextInt(9);
AB[A1][B1]=0;
d=0;
}

}

}


/**
*
*/
//输出  数独
System.out.println("  生 成 的 数 独 是 :  ");
for(int i=0;i<=8;i++){
for(int j=0;j<=8;j++){
System.out.print(AB[i][j]);
System.out.print(" ");
}
System.out.println();
}
      }


/**
* 传入一个数字的方法
*/

public void Chuan(int a,int b){
java.util.Random ran=new java.util.Random();
int t=ran.nextInt(9)+1;
AB[a][b]=t;
}






     /**
      * 横排的判定方法
      * @param a
      * @param b
      * @param bool: 判断计数器
      * @return
      */
    public int Heng(int a,int b,int bool){
    bool=0;
    for(int i=0;i<=8;i++){
       if(i!=b){
    if(AB[a][b]==AB[a][i]){
    bool=1;
    break;
    }
       }
    }
   return bool;
      }
    /**
     * 竖排的判定方法
     * @param a
     * @param b
     * @param bool
     * @return
     */
public int Shu(int a,int b,int bool){
bool=0;
for(int i=0;i<=8;i++){
       if(i!=a){
    if(AB[a][b]==AB[i][b]){
    bool=2;
    break;
    }
       }
    }
   return bool;
}


/**
* 在小的九个格子中的判定方法
* @param a
* @param b
* @param bool
* @return
*/
public int Xiao(int a,int b,int bool){
bool=0;
//横的第一排
if(a==0||a==1||a==2){
/*
*
*/
//竖的第一列
if(b==0||b==1||b==2){
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=3;
    break;
    }
       }
    }
}
}else
//竖的第二列
if(b==3||b==4||b==5){
for(int i=0;i<=2;i++){
for(int j=3;j<=5;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=3;
    break;
    }
       }
    }
}

}else
//竖的第三列
if(b==6||b==7||b==8){
for(int i=0;i<=2;i++){
for(int j=6;j<=8;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=3;
    break;
    }
       }
    }
}

}
}else
//横的第二排
if(a==3||a==4||a==5){
if(b==0||b==1||b==2){
for(int i=3;i<=5;i++){
for(int j=0;j<=2;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=3;
    break;
    }
       }
    }
}
}else if(b==3||b==4||b==5){
for(int i=3;i<=5;i++){
for(int j=3;j<=5;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=3;
    break;
    }
       }
    }
}

}else if(b==6||b==7||b==8){
for(int i=3;i<=5;i++){
for(int j=6;j<=8;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=3;
    break;
    }
       }
    }
}

}
}else
//横的第三排
if(a==6||a==7||a==8){
if(b==0||b==1||b==2){
for(int i=6;i<=8;i++){
for(int j=0;j<=2;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=1;
    break;
    }
       }
    }
}
}else if(b==3||b==4||b==5){
for(int i=6;i<=8;i++){
for(int j=3;j<=5;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=1;
    break;
    }
       }
    }
}

}else if(b==6||b==7||b==8){
for(int i=6;i<=8;i++){
for(int j=6;j<=8;j++){
       if(i!=a&&j!=b){
    if(AB[a][b]==AB[i][j]){
    bool=1;
    break;
    }
       }
    }
}
}
}
return bool;
}
}
分享到:
评论

相关推荐

    数独生成代码

    C语言数独代码,可生成随机数独。采用矩阵变换的方法,值得一看。

    JAVA 数独游戏代码

    JAVA的数独游戏代码,随机生成数独,如果有三个难度可选

    Java数独源代码(题目随机生成)

    根据网上的andriod开发教程资源所开发的数独应用。是完整的数独代码,功能基本实现。

    数独游戏,随机生成只有唯一解的数独表

    用c#写了一个能够随机生成唯一解的数独游戏,很多其他人的都不是随机生成,而且也不能保证生成的数独表的解是唯一的,所以我自己写了一个可以随机生成唯一解的数独游戏,上传上来和大家一起学习学习,看看算法还有...

    c#实现数独

    c#对数独的实现,方便实用,且具有计算功能,是组合数学的必备程序

    sd.rar_c++数独_c++生成数独_数独_生成数独_随机生成数独

    数独游戏,详细原代码,实现了随机游戏,过关斩将,生成数独,读写档以及测试数独的功能。

    C语言做的模拟数独游戏系统

    用C语言做的模拟数独游戏做的代码,其中数独会随机生成

    Sudoku:此代码生成随机数独谜题或解决任何给定的数独谜题。-matlab开发

    自从我知道数独游戏以来,我... 这个 m 文件包含随机猜测方案,因此,当给它一个空的数独谜题时,它会解决它,结果,它会生成一个随机数独谜题。 之后,另一个 m 文件 Sudoku.m 被用来生成 SudokuSolver.m 的用户界面。

    数独程序源代码(C语言)

    linux下用c语言开发的产生数独矩阵的源码。数独为随机生成。

    C++数独游戏

    C++编写的数独小游戏,DOS窗口运行操作,可随机生成数独

    用Python生成数独

    5、用添加了随机解法的解数独算法填写出一个随机数独谜底; 6、建立一个集合l=[0~80],随机从谜底抠去数字,然后算能否得到解,并验证是否唯一,行就保留,不行就回归上一步; 7、直到集合l里的数字抠完,跳出循环。...

    数独可执行JAR包

    一个可以支持2到10介的数独游戏; 可随机生成4个难度等级的多介数独 可以验证2-10介的数独答案 若要源代码请联系

    Android 九宫格 数独游戏.rar

    Android 九宫格 数独游戏,生成随机数字的源数组,随机数字从该数组中产生,生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字.游戏玩法:  通过点击棋盘中空白的位置并填入适当的数字,使得...

    源代码-iOS开发实例-数独小游戏

    这是一个实现非常简单的数独游戏APP项目源代码,推荐在iPhone11上运行。没有复杂算法,主要难度只在于故事板的搭建上...缺点是数独盘面相对固定,未实现数独盘面的随机生成、不同难度题目的生成以及自动计算数独的解。

    数独游戏源码

    这是一个MFC写的数独游戏的源码,功能有出题和解题。 题目采用随机生成,大多数题目会1秒内生成,部分题目可能时间较长。 解题在20毫秒以内可以解出答案。

    ios-数独.zip

    里面有数独生成算法,还有基础的解数独算法,1.本来想写一个候选解法,发现没必要,因为就是让电脑先去猜一个可能数,发现错误时返回填其它可能数.2.还有挖孔是随机挖的,所以可能造成电脑解不出时,是因为某个空格可能两种...

    sudoku:用 Javascript、CSS 和 HTML 实现的数独游戏

    每个游戏板都是伪随机生成的。 该游戏具有响应性,另外还包括对桌面键盘导航的支持。 如果他们的游戏违反了游戏的约束之一,玩家会收到即时反馈。 该项目包括一个使用 Grunt、Browserify 和 LESS 的构建系统。 该...

    基于java实现数独游戏,包含源码及报告

    课程设计要求基于java编写程序完成数独游戏,能够随机生成九宫格的已知数,并通过算法检测所填数字是否满足数独条件。数独是锻炼脑筋的好方法,提高逻辑思维能力。 基于Java编写数独游戏,具体要求如下: 1、游戏的...

    Sudoku:解决任何难度级别的 9X9 数独-matlab开发

    如果有人想要 6X6 或其他大小数独的代码,请告诉我。虽然到目前为止我还没有收到任何错误,如果遇到任何错误,请报告。 请评价提交和评论!!! 还可以查看文件交换中提供的一个非常棒的游戏(我称之为逻辑游戏)...

    Matlab代码开发案例分析:设计数学和化学小游戏代码.pdf

    % 生成数独游戏的随机初始状态 sudoku = zeros(9); for i = 1:9 row = mod(i+2,3)+floor((i-1)/3)*3; col = mod(i+1,3)+floor((i-1)/3)*3; sudoku(row,col) = i; end % 随机删除数独游戏的初始数字 for i = 1:40...

Global site tag (gtag.js) - Google Analytics