`
- 浏览:
25907 次
- 性别:
- 来自:
湖南
-
本例 数独 的生成 全部 采用 随机的 方法
故 生成时间的长短 全靠运气了。。。
/**
* 随机数独的生成
* @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
相关推荐
数独是一种源自18世纪末的瑞士数学游戏,后来在日本流行并得名“数独”,在全世界范围内广受欢迎。...在实际开发中,还可以考虑增加更多功能,如生成随机数独、保存和加载游戏状态等,以提升用户体验。
在本项目中,我们将探讨Java实现的数独生成算法以及基于此算法的Android数独游戏APK。 首先,让我们深入理解Java数独生成算法。这种算法通常分为两个主要部分:生成一个合法的数独配置和解决数独谜题。生成算法可以...
压缩包中的`sudu`文件可能是实现了上述算法的源代码,可以用于学习和理解数独生成的实现过程。通过阅读和分析这个文件,可以深入了解如何将数学理论转化为实际的程序代码,同时提升对算法和数据结构的理解。
JUnit等测试框架可以用来编写测试用例,验证数独生成和解题的正确性。 通过这个项目,初学者不仅可以掌握Java编程基础,还能锻炼算法思维,了解如何将复杂的逻辑转换为可执行的代码。同时,对于Android开发,还能...
数独游戏的开发可能涉及到生成随机数独板面、解决算法的实现,以及友好的用户交互界面设计。 7. **数独逻辑**: 数独是一种逻辑解谜游戏,其核心在于每一行、每一列以及每一个宫格内的数字都不能重复。在Python中...
- **数独生成**:数独生成算法通常采用回溯法或者基于遗传算法。回溯法通过随机填充部分数字并检查是否合法,如果不合法则撤销填充,尝试其他可能,直到生成一个完整且唯一的数独解。 - **答案验证**:验证算法则...
2. 实现数独生成器:随机生成一个完整的数独解决方案,然后通过删除部分数字生成一个残局。 3. 检查逻辑:编写函数检查当前填入的数字是否合法,即所在行、列和小宫格内没有重复。 4. 回溯算法:当用户填入数字后,...
6. **标签解析**:“java数独”指的是使用Java语言实现数独算法,“数独题库”意味着程序可以生成多组不同的题目,而“数独生成”和“java数独题库高效生成”强调了算法的效率和生成大量题目的能力。 在压缩包文件...
在数独生成方面,程序可能采用了两种常见的方法:回溯法和深度优先搜索(DFS)。这两种方法都是通过尝试填入数字,如果发现违反了数独规则(即行、列或小九宫格内有重复数字),则回溯到上一步,尝试下一个数字。...
此程序不仅提供了随机生成数独的功能,还允许用户选择不同的难度级别(例如:简单、中等、困难)。 #### 二、关键类与方法解析 1. **ShuDu 类**: - **继承自 JFrame**:表明这是一个基于Swing框架的图形界面应用...
在这个数独生成器中,MATLAB被用来创建算法,这些算法能够随机生成满足数独规则的填空矩阵。程序可能包含了初始化矩阵、生成随机解决方案、检查并消除重复解、以及根据难度调整空白数量等步骤。 首先,生成器会创建...
用c#写了一个能够随机生成唯一解的数独游戏,很多其他人的都不是随机生成,而且也不能保证生成的数独表的解是唯一的,所以我自己写了一个可以随机生成唯一解的数独游戏,上传上来和大家一起学习学习,看看算法还有...
用C语言做的模拟数独游戏做的代码,其中数独会随机生成
7. **代码组织**:遵循良好的编程习惯,将代码分解为若干函数,如`generatePuzzle()`生成数独,`displayBoard()`显示盘面,`isValidInput()`验证输入等,有助于代码的可读性和维护性。 8. **调试和测试**:VS提供了...
2. **数独生成**:自动生成数独布局涉及到随机填充一部分单元格,同时确保解决方案唯一。这可以通过回溯算法实现,即从一个空白的9x9网格开始,随机填入数字,然后检查是否违反规则(行、列、宫内数字重复)。如果...
自从我知道数独游戏以来,我... 这个 m 文件包含随机猜测方案,因此,当给它一个空的数独谜题时,它会解决它,结果,它会生成一个随机数独谜题。 之后,另一个 m 文件 Sudoku.m 被用来生成 SudokuSolver.m 的用户界面。
在C语言中,实现数独生成通常涉及到以下几个关键知识点: 1. **随机数生成**:为了随机生成数独矩阵,开发者会使用C语言的随机数生成函数,如`srand()`来设置种子,`rand()`来生成随机数。随机数通常用于填充初始的...
1. **随机填充**:数独生成通常从一个完全填满的数独开始,然后通过随机移除一些数字形成不完整的数独。在Matlab中,可以创建一个9x9的二维数组,初始化为1到9的全排列,然后随机选取一些位置将其设为空,以创建难度...
该数独游戏代码提供了一种简单直观的方法来自动生成一个合法的数独谜题。通过定义一系列检查方法来确保每个数字的填入都符合数独游戏的规则。这种实现方式不仅易于理解,也为进一步扩展提供了基础。例如,可以在此...