`
shenjun134
  • 浏览: 16934 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数独算法实现(循环方式)

    博客分类:
  • java
 
阅读更多
package com.sudoku;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Sudoku {
	private static int[][] DATA = new int[9][9];
	private static int[] DATA_1_9 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	private static Random ran = new Random();

	public static int generateNum(int erect, int row) {
		if (0 == erect && 0 == row) {
			return DATA_1_9[ran.nextInt(9)];
		}
		List<String> list = new ArrayList<String>();

		for (int i = 0; i < 9; i++) {
			list.add("" + (i + 1));
		}

		for (int i = 0; i < row && row < 9; i++) {
			list.remove("" + DATA[i][erect]);
		}
		for (int i = 0; i < erect && erect < 9; i++) {
			list.remove("" + DATA[row][i]);
		}

		if (list.size() == 0) {
			return 0;
		}

		return Integer.valueOf(list.get(ran.nextInt(list.size())));
	}

	public static void init() {
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				DATA[i][j] = generateNum(j, i);
			}
		}
	}

	public static boolean checkZERO() {
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				if (DATA[i][j] == 0) {
					return true;
				}
			}
		}
		return false;
	}

	public static void generate() {
		while (checkZERO()) {
			init();
		}
		print();
	}

	public static void print() {
		String flag = "~";
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				System.out.print("[" + DATA[i][j] + "]");
				if (j % 3 == 2 && j < 8) {
					System.out.print(flag);
				}
			}
			System.out.println();
			if (i % 3 == 2 && i < 8) {
				for (int k = 0; k < 14; k++) {
					System.out.print(" ");
					System.out.print(flag);
				}
				System.out.println();
			}
		}
	}

	public static void main(String[] args) {
		long startTime1 = System.nanoTime();
		new sodu().print();
		System.out.println("Total time1: " + (System.nanoTime() - startTime1));
		
		long startTime2 = System.nanoTime();
		generate();
		System.out.println("Total time2: " + (System.nanoTime() - startTime2));
	}
}
分享到:
评论

相关推荐

    易语言数独算法

    在编程领域,实现数独算法是一项有趣的挑战,尤其在易语言这样的中文编程环境中。易语言数独算法主要涉及以下几个关键知识点: 1. **数组和二维数据结构**:数独盘面通常表示为一个9x9的二维数组,其中包含9个3x3的...

    数独算法,使用C++实现

    根据提供的信息,我们可以总结出两个不同的数独算法实现案例,分别使用C++语言编写。第一个案例提供了一个较为简单的数独生成方法,而第二个案例则展示了如何解决一个预定义的数独谜题。接下来,我们将详细解析这两...

    关于"数独--九宫格"的算法实现

    这种游戏全面考验做题者观察能力和推理能力,虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式。 关于数独的算法有很多种,最基本的有基拙挖掘法,唯一解法,侯选数置换法.查...

    Android数独C++算法案例

    在这个“Android数独C++算法案例”中,我们探讨的正是如何利用Java Native Interface (JNI) 技术在Android应用中嵌入C++编写的数独算法,以实现更高效的数独求解过程。 数独是一种逻辑游戏,其目标是填充一个9x9的...

    VB数独,简单算法通俗易懂

    在VB中实现数独算法,通常会用到以下技术: - 控件数组:用于表示数独网格,方便批量处理单元格。 - 循环和条件语句:遍历网格,判断数字的合法性。 - 变量和数组:存储当前填入的数字、可能的数字列表等信息。 - ...

    Vb数独计算器&出题器 回溯法算法

    Vb数独计算器及出题器运用了编程语言Visual Basic(VB)实现,它包含了数独的求解和生成功能,尤其采用了回溯法这一算法来高效地处理问题。 回溯法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在过程...

    回溯算法求数独的解

    实现回溯算法求解数独的步骤可以分为以下几个关键部分: 1. **初始化**:创建一个空的数独矩阵,表示待解的数独题目,或者从已知的数独题目开始。 2. **选择单元格**:找到当前未填充的单元格,作为下一个要填入...

    数独游戏算法

    在本案例中,我们将探讨如何用Java实现数独游戏的算法,包括生成数独棋盘和解决数独问题。 1. **生成数独棋盘算法**: - 随机生成:最简单的生成方法是随机填充一部分格子,然后使用回溯算法确保生成的棋盘有唯一...

    python实现数独算法实例

    ### Python 实现数独算法详解 #### 一、引言 数独是一种流行的逻辑填数字游戏,玩家需要根据已有的数字,在一个9×9的网格中填入数字1至9,使得每一行、每一列以及每一个3×3的小宫格内都不出现重复的数字。本篇...

    数独的算法

    ### 数独的算法 #### 摘要 本文档旨在介绍一种通过C语言解决数独问题的方法,并通过实例展示如何模拟人类解数独的思维过程。文中提到了三种主要的解题策略:唯一法、排除法以及尝试法,并讨论了如何使用C语言编程...

    C# 数独求解算法的实现

    C# 数独求解算法的实现 本文将对 C# 数独求解算法的实现进行详细的介绍。数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续...

    JS实现判断有效的数独算法示例

    总结来说,JS实现判断有效的数独算法示例主要讲述了如何通过编写JavaScript代码来遵循数独的基本规则,并验证给定的数独棋盘是否符合这些规则。在实现中,使用了数组、对象以及双重循环等编程基础知识点。通过实践这...

    Javascript 实现的数独解题算法网页实例

    JavaScript 实现的数独解题算法是通过模拟人类解决数独问题的逻辑来设计的。数独游戏的目标是在一个9x9的网格中填入数字,使得每行、每列和每个3x3的小宫格(也称为子网格或区块)内的数字都从1到9不重复。以下是对...

    c语言实现数独问题

    我们的目标是找到一种方式,用程序自动填充这些空格,满足数独的规则。 C语言实现数独问题的基本步骤如下: 1. **输入解析**:程序需要能够读取一个数独题目,通常是以文本形式的9x9矩阵。这可以通过从标准输入...

    简单实现python数独游戏

    数独游戏的核心是数独的生成和求解算法,作者通过Python实现了数独的基本规则和界面显示,这为初学者提供了一个学习和参考的平台。尽管代码片段不完整,但通过作者提供的信息,我们能够理解整个实现的思路和方法。

    易语言数独算法源码-易语言

    学习这个易语言数独算法源码,不仅可以深入理解数独问题的解决方法,还能提升对易语言的使用熟练度,包括数组操作、循环结构、条件判断、函数调用等。同时,通过阅读和分析源码,还可以了解如何在实际项目中应用高级...

    数独游戏(使用vc实现,含有自动求解答案模块)

    在VC++中,可以利用数组或二维动态数组来表示数独网格,并通过循环遍历进行合法性检查。 **数独求解**: 数独求解是游戏的核心部分,通常采用回溯法或递归策略。这种算法尝试在每个空白单元格中填入1到9的数字,...

    安卓数独游戏源码

    【安卓数独游戏源码】是一款专为Android平台设计的数独游戏开发资源,它包含了完整的源代码,为开发者提供了一次深入理解Android...对于想要开发自己的游戏或对数独算法感兴趣的人来说,这是一份极具价值的学习资料。

    数独游戏的算法,代码超简单

    在这个主题中,我们将探讨一种简洁的算法来解决数独问题。 算法概述: 1. **回溯法**:这是一种常用解决数独问题的方法,它基于深度优先搜索(DFS)策略。我们从空格最多的单元格开始,尝试填充1到9的数字,如果在...

    c++数独小游戏

    总结,通过C++实现数独小游戏,不仅可以锻炼编程能力,还能深入理解逻辑和算法的应用。从界面设计到算法实现,每一个环节都需要细致的思考和实践。这个项目对于初学者来说,是一个很好的学习C++面向对象编程和算法的...

Global site tag (gtag.js) - Google Analytics