`
ls403718787
  • 浏览: 994 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
文章分类
社区版块
存档分类
最新评论

自己写的一个数独生成程序

阅读更多
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("");
			}
		}
	}
}



0
0
分享到:
评论

相关推荐

    数独生成程序C语言源代码

    数独的行列变换可以用矩阵计算实现;这里用的是赋值实现的方式,因为用矩阵计算还要有矩阵的运算库

    生成四种难度的数独生成器MATLAB程序

    数独是一种广受欢迎的逻辑推理游戏,...总的来说,这个MATLAB程序提供了深入理解数独生成算法的机会,同时也展示了MATLAB在解决逻辑问题时的灵活性。无论是为了娱乐还是学习编程技巧,这个工具都能提供宝贵的实践经验。

    基于挖洞思想的数独游戏生成算法

    数独游戏的生成算法是其核心,而挖洞思想是一种创新的数独生成方法,其基本原理是先生成一个完整的数独解决方案,然后通过特定的规则逐渐删除一些数字,使得解决方案变成一个数独谜题,同时保证该谜题有一个唯一的...

    数独游戏答案生成器 真牛逼

    此外,对于编程爱好者来说,编写一个自己的数独生成器也是一种不错的实践,可以深入理解算法和逻辑思维的重要性。总的来说,数独游戏不仅是一种娱乐活动,更是一种锻炼大脑、提升逻辑思维的有益工具。

    简洁高效的数独矩阵生成器

    在这个场景中,我们讨论的是一个简洁高效的数独矩阵生成器,该生成器是用C++编程语言编写的,能够根据用户的需求生成不同阶数的数独矩阵。 首先,我们来看数独矩阵生成器的核心算法。生成数独矩阵通常涉及两个主要...

    数独游戏---自写算法。随即生成数独

    2. 实现数独生成器:随机生成一个完整的数独解决方案,然后通过删除部分数字生成一个残局。 3. 检查逻辑:编写函数检查当前填入的数字是否合法,即所在行、列和小宫格内没有重复。 4. 回溯算法:当用户填入数字后,...

    数独生成求解器

    "App"通常指的是应用程序,暗示这个数独生成求解器可能已经打包为一个用户友好的桌面程序或者移动应用,方便用户直接使用。 总结来说,"数独生成求解器"是一个高效的Java程序,利用深度递归算法在极短的时间内生成...

    数独 生成 解答

    在提供的压缩包文件"sd"中,可能包含一个数独软件的可执行程序或者源代码,用户可以通过运行这个程序来生成和解答数独题目。这样的工具对于初学者和爱好者来说非常实用,既可以帮助他们练习数独技巧,也能为他们提供...

    数独求解程序游戏设计报告书

    或者开发更多样化的数独生成算法,以便提供更多类型的数独题目供玩家挑战。 综上所述,本报告深入探讨了数独游戏的计算机求解技术,不仅有助于推动计算机科学领域的发展,也为数独爱好者提供了一种新的解决方案。

    java写的数独程序

    这个项目是用Java编程语言实现的一个数独游戏程序,它包含了一个图形用户界面(GUI),使得用户可以通过直观的方式来玩这个游戏。 在Java中实现数独程序,通常会涉及以下几个关键知识点: 1. **Java基础**:首先,...

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

    在数独生成方面,程序可能采用了两种常见的方法:回溯法和深度优先搜索(DFS)。这两种方法都是通过尝试填入数字,如果发现违反了数独规则(即行、列或小九宫格内有重复数字),则回溯到上一步,尝试下一个数字。...

    九宫格数独题目生成器.rar

    在C#编程语言中,实现数独生成器的关键在于设计合理的算法。一般而言,这涉及到以下几个步骤: 1. **基础设置**:创建9x9的二维数组,初始化部分已知数字,形成一个基础的数独题目框架。 2. **空位查找**:找到...

    微信小程序实现九宫格数独

    在这个项目中,我们关注的是如何利用微信小程序来实现一个九宫格数独游戏。 首先,我们需要了解数独的基本规则。数独是一种基于逻辑的数字填充游戏,通常在9x9的九宫格中进行,分为9个3x3的小九宫格。每个小九宫格...

    java数独题库高效生成算法代码

    6. **标签解析**:“java数独”指的是使用Java语言实现数独算法,“数独题库”意味着程序可以生成多组不同的题目,而“数独生成”和“java数独题库高效生成”强调了算法的效率和生成大量题目的能力。 在压缩包文件...

    JAVA写的数独,附带生成唯一解和各种难度的算法

    总的来说,这个JAVA编写的数独游戏项目不仅提供了一个互动的娱乐工具,还包含了一套完整的数独生成和解决算法,对于学习和理解数独逻辑以及JAVA编程都具有很高的价值。通过阅读和理解代码,开发者不仅可以了解数独的...

    自己用MFC写的一个数独游戏

    数独游戏的核心在于9×9的网格被划分为9个3×3的小宫格,初始状态下,部分单元格已填有数字,玩家的目标是根据已知数字,通过逻辑推理填满剩余的空白单元格,使得每一行、每一列以及每一个小宫格内的数字从1到9都...

    一个简单的Delphi四阶数独程序代码

    在这个场景中,我们关注的是一个使用Delphi编写的四阶数独(Sudoku)程序。四阶数独相对于传统的九阶数独而言,难度和复杂度更低,更适合初学者理解和实践。 在Delphi中开发数独程序,主要涉及到以下几个核心知识点...

    数独程序(c)

    标题 "数独程序(c)" 指的是一个用 C 语言编写的数独解决方案。这个程序可能包含了实现数独解法的核心算法,以及相关的数据结构和辅助函数。描述中提到程序注释是用日语编写的,这可能会对非日语使用者造成一些阅读...

    微信小程序开发-游戏类-数独案例源码.zip

    在这个“微信小程序开发-游戏类-数独案例源码.zip”压缩包中,你将获得一个实现数独游戏的小程序示例。数独是一种逻辑解谜游戏,玩家需要填充一个9x9的网格,使得每一行、每一列以及每个3x3的小宫格内都包含数字1到9...

    数独随机矩阵生成

    数独是一种广受欢迎的逻辑推理游戏,它基于一个9x9的网格,被分为9个小的3x3的宫格。每个宫格、行和列都必须填入1到9的数字,且每个数字在各自的宫格、行和列中只能出现一次。"数独随机矩阵生成"是指创建符合数独...

Global site tag (gtag.js) - Google Analytics