import java.util.Random;
public class Shudu {
private int[][] pan = new int[9][9];
private final static int EASY = 20;
private final static int NORMAL = 40;
private final static int HARD = 60;
public static void main(String[] args) {
Shudu s = new Shudu();
s.init();
s.fillTheFirstRow();
s.fillOtherCellAndCheck();
s.sudoku(NORMAL);
s.out();
}
//初始化各个值为0
public void init() {
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
pan[i][j] = 0;
}
}
}
//设置第一行的值,随机1-9
public void fillTheFirstRow() {
pan[0][random()] = 1;
for(int cellValue = 2; cellValue < 10; cellValue++){
int col = random();
while(pan[0][col] != 0){
col = random();
}
pan[0][col] = cellValue;
}
}
public void fillOtherCellAndCheck() {
int row = 1, col = 0;
do {
pan[row][col]++;
//如果为10的话表示失败,回退继续判断
if(pan[row][col] == 10) {
pan[row][col] = 0;
col--;
if(col < 0) {
row--;
col = 8;
}
continue;
}
//判断行中的数是否为1-9且不重复,成功则前进
if(checkRow(row,col,pan[row][col])) {
col++;
if(col == 9) {
row++;
col = 0;
}
}
}while(row < 9);
}
public int random() {
Random random = new Random();
return random.nextInt(9);
}
public boolean checkRow(int row, int col, int cellValue) {
for(int i = 0; i < 9; i++) {
if(i == col) {
continue;
}
if(pan[row][i] == cellValue) {
return false;
}
}
return checkCol(row, col, cellValue);
}
public boolean checkCol(int row, int col, int cellValue) {
for(int i = 0; i < 9; i++) {
if(i == row) {
continue;
}
if(pan[i][col] == cellValue) {
return false;
}
}
return checkSudoku(row, col, cellValue);
}
public boolean checkSudoku(int row, int col, int cellValue) {
int n = row / 3;
int m = col / 3;
for(int i = n*3; i < 3*(n+1); i++){
for(int j = m*3; j < 3*(m+1); j++){
if(row== i && col == j) {
continue;
}
if(pan[i][j] == cellValue) {
return false;
}
}
}
return true;
}
//随机设置count个cell的值为0
public void sudoku(int count) {
for(int i = 0; i < count; i++) {
int row = random();
int col = random();
while(pan[row][col] == 0) {
row = random();
col = random();
}
pan[row][col] = 0;
}
}
public void out() {
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
System.out.print(pan[i][j] + " ");
if((j+1) % 3 == 0 && j != 8) {
System.out.print(" ");
}
if(j == 8) {
System.out.println("");
}
}
if((i+1) % 3 == 0 && i != 8) {
System.out.println("");
}
}
}
}
分享到:
相关推荐
数独的行列变换可以用矩阵计算实现;这里用的是赋值实现的方式,因为用矩阵计算还要有矩阵的运算库
2. 实现数独生成器:随机生成一个完整的数独解决方案,然后通过删除部分数字生成一个残局。 3. 检查逻辑:编写函数检查当前填入的数字是否合法,即所在行、列和小宫格内没有重复。 4. 回溯算法:当用户填入数字后,...
数独是一种广受欢迎的逻辑推理游戏,...总的来说,这个MATLAB程序提供了深入理解数独生成算法的机会,同时也展示了MATLAB在解决逻辑问题时的灵活性。无论是为了娱乐还是学习编程技巧,这个工具都能提供宝贵的实践经验。
数独游戏的生成算法是其核心,而挖洞思想是一种创新的数独生成方法,其基本原理是先生成一个完整的数独解决方案,然后通过特定的规则逐渐删除一些数字,使得解决方案变成一个数独谜题,同时保证该谜题有一个唯一的...
此外,对于编程爱好者来说,编写一个自己的数独生成器也是一种不错的实践,可以深入理解算法和逻辑思维的重要性。总的来说,数独游戏不仅是一种娱乐活动,更是一种锻炼大脑、提升逻辑思维的有益工具。
在这个场景中,我们讨论的是一个简洁高效的数独矩阵生成器,该生成器是用C++编程语言编写的,能够根据用户的需求生成不同阶数的数独矩阵。 首先,我们来看数独矩阵生成器的核心算法。生成数独矩阵通常涉及两个主要...
"App"通常指的是应用程序,暗示这个数独生成求解器可能已经打包为一个用户友好的桌面程序或者移动应用,方便用户直接使用。 总结来说,"数独生成求解器"是一个高效的Java程序,利用深度递归算法在极短的时间内生成...
一个优秀的数独生成工具,不仅能快速生成游戏题目,而且还能根据玩家的需求随机控制数独题目的难度。这种工具通常内置多种算法,如回溯法、递归、深度优先搜索等,这些都是编程中常用的算法,它们可以在确保数独题目...
或者开发更多样化的数独生成算法,以便提供更多类型的数独题目供玩家挑战。 综上所述,本报告深入探讨了数独游戏的计算机求解技术,不仅有助于推动计算机科学领域的发展,也为数独爱好者提供了一种新的解决方案。
在C#编程语言中,实现数独生成器的关键在于设计合理的算法。一般而言,这涉及到以下几个步骤: 1. **基础设置**:创建9x9的二维数组,初始化部分已知数字,形成一个基础的数独题目框架。 2. **空位查找**:找到...
这个项目是用Java编程语言实现的一个数独游戏程序,它包含了一个图形用户界面(GUI),使得用户可以通过直观的方式来玩这个游戏。 在Java中实现数独程序,通常会涉及以下几个关键知识点: 1. **Java基础**:首先,...
总的来说,这个JAVA编写的数独游戏项目不仅提供了一个互动的娱乐工具,还包含了一套完整的数独生成和解决算法,对于学习和理解数独逻辑以及JAVA编程都具有很高的价值。通过阅读和理解代码,开发者不仅可以了解数独的...
在数独生成方面,程序可能采用了两种常见的方法:回溯法和深度优先搜索(DFS)。这两种方法都是通过尝试填入数字,如果发现违反了数独规则(即行、列或小九宫格内有重复数字),则回溯到上一步,尝试下一个数字。...
在这个项目中,我们关注的是如何利用微信小程序来实现一个九宫格数独游戏。 首先,我们需要了解数独的基本规则。数独是一种基于逻辑的数字填充游戏,通常在9x9的九宫格中进行,分为9个3x3的小九宫格。每个小九宫格...
6. **标签解析**:“java数独”指的是使用Java语言实现数独算法,“数独题库”意味着程序可以生成多组不同的题目,而“数独生成”和“java数独题库高效生成”强调了算法的效率和生成大量题目的能力。 在压缩包文件...
数独游戏的核心在于9×9的网格被划分为9个3×3的小宫格,初始状态下,部分单元格已填有数字,玩家的目标是根据已知数字,通过逻辑推理填满剩余的空白单元格,使得每一行、每一列以及每一个小宫格内的数字从1到9都...
在这个场景中,我们关注的是一个使用Delphi编写的四阶数独(Sudoku)程序。四阶数独相对于传统的九阶数独而言,难度和复杂度更低,更适合初学者理解和实践。 在Delphi中开发数独程序,主要涉及到以下几个核心知识点...
标题 "数独程序(c)" 指的是一个用 C 语言编写的数独解决方案。这个程序可能包含了实现数独解法的核心算法,以及相关的数据结构和辅助函数。描述中提到程序注释是用日语编写的,这可能会对非日语使用者造成一些阅读...
在这个“微信小程序开发-游戏类-数独案例源码.zip”压缩包中,你将获得一个实现数独游戏的小程序示例。数独是一种逻辑解谜游戏,玩家需要填充一个9x9的网格,使得每一行、每一列以及每个3x3的小宫格内都包含数字1到9...
这是一个基于C++的数独生成与求解系统,旨在生成数独游戏并为其找到所有可能的解。该系统包括三个主要部分数独生成、数独求解和测试。 ## 主要特性与功能 1. 数独生成能够根据用户指定的参数生成不同难度和规模的...