`
- 浏览:
25458 次
- 性别:
- 来自:
湖南
-
本例 数独 的生成 全部 采用 随机的 方法
故 生成时间的长短 全靠运气了。。。
/**
* 随机数独的生成
* @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;
}
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
C语言数独代码,可生成随机数独。采用矩阵变换的方法,值得一看。
JAVA的数独游戏代码,随机生成数独,如果有三个难度可选
根据网上的andriod开发教程资源所开发的数独应用。是完整的数独代码,功能基本实现。
用c#写了一个能够随机生成唯一解的数独游戏,很多其他人的都不是随机生成,而且也不能保证生成的数独表的解是唯一的,所以我自己写了一个可以随机生成唯一解的数独游戏,上传上来和大家一起学习学习,看看算法还有...
c#对数独的实现,方便实用,且具有计算功能,是组合数学的必备程序
数独游戏,详细原代码,实现了随机游戏,过关斩将,生成数独,读写档以及测试数独的功能。
用C语言做的模拟数独游戏做的代码,其中数独会随机生成
自从我知道数独游戏以来,我... 这个 m 文件包含随机猜测方案,因此,当给它一个空的数独谜题时,它会解决它,结果,它会生成一个随机数独谜题。 之后,另一个 m 文件 Sudoku.m 被用来生成 SudokuSolver.m 的用户界面。
linux下用c语言开发的产生数独矩阵的源码。数独为随机生成。
C++编写的数独小游戏,DOS窗口运行操作,可随机生成数独
5、用添加了随机解法的解数独算法填写出一个随机数独谜底; 6、建立一个集合l=[0~80],随机从谜底抠去数字,然后算能否得到解,并验证是否唯一,行就保留,不行就回归上一步; 7、直到集合l里的数字抠完,跳出循环。...
一个可以支持2到10介的数独游戏; 可随机生成4个难度等级的多介数独 可以验证2-10介的数独答案 若要源代码请联系
Android 九宫格 数独游戏,生成随机数字的源数组,随机数字从该数组中产生,生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字.游戏玩法: 通过点击棋盘中空白的位置并填入适当的数字,使得...
这是一个实现非常简单的数独游戏APP项目源代码,推荐在iPhone11上运行。没有复杂算法,主要难度只在于故事板的搭建上...缺点是数独盘面相对固定,未实现数独盘面的随机生成、不同难度题目的生成以及自动计算数独的解。
这是一个MFC写的数独游戏的源码,功能有出题和解题。 题目采用随机生成,大多数题目会1秒内生成,部分题目可能时间较长。 解题在20毫秒以内可以解出答案。
里面有数独生成算法,还有基础的解数独算法,1.本来想写一个候选解法,发现没必要,因为就是让电脑先去猜一个可能数,发现错误时返回填其它可能数.2.还有挖孔是随机挖的,所以可能造成电脑解不出时,是因为某个空格可能两种...
每个游戏板都是伪随机生成的。 该游戏具有响应性,另外还包括对桌面键盘导航的支持。 如果他们的游戏违反了游戏的约束之一,玩家会收到即时反馈。 该项目包括一个使用 Grunt、Browserify 和 LESS 的构建系统。 该...
课程设计要求基于java编写程序完成数独游戏,能够随机生成九宫格的已知数,并通过算法检测所填数字是否满足数独条件。数独是锻炼脑筋的好方法,提高逻辑思维能力。 基于Java编写数独游戏,具体要求如下: 1、游戏的...
如果有人想要 6X6 或其他大小数独的代码,请告诉我。虽然到目前为止我还没有收到任何错误,如果遇到任何错误,请报告。 请评价提交和评论!!! 还可以查看文件交换中提供的一个非常棒的游戏(我称之为逻辑游戏)...
% 生成数独游戏的随机初始状态 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...