`
tianshi_kco
  • 浏览: 22450 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数独算法

    博客分类:
  • java
 
阅读更多
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


public final class Demo {

	final static int MACH_RESULT = -1;	//多解
	final static int NONE_RESULT = 0;	//无解
	/*
	Description  
	         推理数独数字
	Input Param 
	         sdata  需要推理的数独数据
	Return Value
	         推理成功的数组
	         失败或其他异常返回null
	*/
	public static  int[][] sudokuDataSolve(int[][] sdata)
	{
		int i =0,j = 0;
		while(!isGameOver(sdata)){
			
			if(sdata[i][j] == 0){
				int num = theValue(sdata,i,j);
				if(num == NONE_RESULT){
					return null;
				}else if(num > 0){
					sdata[i][j] = num;
					i = 0;
					j = 0;
				}
			}
			j ++;
			if(j == 9){
				j = 0;
				i ++;
				if(i == 9){
					return null;
				}
			}
			
		}
		
		return sdata;
	}
	public static int theValue(int[][] sdate,int row,int line){
		List<Integer> maybeValue = new ArrayList<Integer>();
		maybeValue.add(1);
		maybeValue.add(2);
		maybeValue.add(3);
		maybeValue.add(4);
		maybeValue.add(5);
		maybeValue.add(6);
		maybeValue.add(7);
		maybeValue.add(8);
		maybeValue.add(9);
		for (int i = 0; i < 9; i++) {
			if(sdate[row][i] != 0){
				maybeValue.remove(new Integer(sdate[row][i]));
			}
			if(sdate[i][line] != 0){
				maybeValue.remove(new Integer(sdate[i][line]));
			}
		}
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				if(sdate[row / 3 + i][line / 3 + j] != 0){
					maybeValue.remove(new Integer(sdate[row / 3 + i][line / 3 + j]));
				}
			}		
		}
		if (maybeValue.size() == 1) {
			return maybeValue.get(0);
		}else if (maybeValue.size() == 0) {
			return  NONE_RESULT;	//无解
		}else{
			return MACH_RESULT;
		}
		
	}
	public static boolean isGameOver(int[][] sdata){
		for (int i = 0; i < sdata.length; i++) {
			for (int j = 0; j < sdata[0].length; j++) {
				if(sdata[i][j] == 0){
					return false;
				}
			}
		}
		return true;
	}
	
}



分享到:
评论

相关推荐

    数独算法,C语言编写,注释很详细。

    在这个压缩包中,包含了一个名为“数独算法.cpp”的C语言源代码文件,用于实现数独的求解算法。 首先,我们来看数独问题的表示。在C语言中,通常会用二维数组来表示数独的矩阵。例如,定义一个9x9的二维数组,数组...

    数独算法,数独游戏

    数独的解决方法多种多样,其中一种常见的是基于回溯的非递归算法,这也是本项目所采用的方法。 在描述中提到的"非递归算法"通常指的是基于深度优先搜索(DFS)的策略。这种算法并不使用递归函数,而是利用栈或队列...

    易语言数独算法

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

    用C++完成数独算法

    在本文中,我们将探讨如何使用C++来实现数独算法,一种解决9x9数独谜题的方法。数独是一种逻辑游戏,目标是填满9x9的网格,使得每一行、每一列以及每一个3x3的小宫格(也称为子网格)都包含数字1到9,且每个数字在每...

    易语言源码易语言数独算法源码.rar

    易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码....

    shudu.rar_java 数独算法_shudu_数独

    本项目是一个用Java实现的数独算法,结合了一个用户界面,便于玩家交互。 在Java中实现数独算法,通常涉及以下关键点: 1. **数据结构设计**:首先,我们需要一个数据结构来存储数独的当前状态。这通常是一个二维...

    数独算法Java版。(有注释,编译已过)

    在IT领域,实现数独算法是编程挑战的一种,它涉及到搜索、回溯和条件判断等编程概念。本篇将深入讲解Java版的数独解算算法。 首先,我们需要创建一个表示数独盘面的数据结构。在Java中,我们可以使用二维数组来实现...

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

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

    9x9数独算法

    数独是一种广受欢迎的逻辑游戏,它通过填充一个9×9的网格,使得每一行、每一列以及每一个3×3的小宫格(也...这个9x9数独算法不仅可以作为一个独立的编程练习,也可以作为学习数据结构、算法和递归思想的一个实例。

    matlab数独算法

    在给定的标题“matlab数独算法”中,我们讨论的是如何使用MATLAB编程语言来实现数独的自动填充算法。 MATLAB是一种高级编程环境,常用于数值计算、符号计算、数据可视化和图像处理等任务。由于其简洁的语法和强大的...

    基于舞蹈链的数独算法,以Python实现

    总的来说,基于舞蹈链的数独算法提供了一种高效的方法来解决这类问题。Python的灵活性和强大的数据处理能力使得实现这个算法变得相对简单。通过理解和实践这个算法,我们可以深入理解完全多归类问题的解决策略,并...

    Objective-C 9宫格数独算法

    在Objective-C中实现9宫格数独算法,我们可以从以下几个方面进行探讨: 1. **数据结构**:首先,我们需要一个合适的数据结构来存储数独的当前状态。一种常见的方式是使用二维数组,如`int sudoku[9][9]`,其中0表示...

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

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

    Sudoku数独算法

    数独算法是解决数独问题的方法,尤其对于计算机程序而言,它能有效地生成和解决任意难度的数独谜题。 一、基础算法:回溯法 数独的基础解法通常是采用回溯法,这是一种试错的方法。首先,对数独盘面进行扫描,找到...

    9*9数独算法

    9*9数独算法:采用递归算法遍历求解数独问题。如果有多个解会全部打印。空位输入0

    C++数独算法

    总的来说,"C++数独算法"项目通过C++编程语言实现了一个基于回溯法的数独解算器,可以在VS2013环境中运行,为玩家提供了解决数独谜题的有效工具。通过深入学习和理解这个项目,开发者不仅可以掌握数独算法,还能提升...

    JavaScript应用实例-数独算法.js

    JavaScript应用实例-数独算法.js

    c++数独算法

    在C++中实现数独算法,主要涉及的是编程逻辑和算法设计。下面将详细介绍这个过程。 首先,我们需要创建一个表示数独盘面的数据结构。通常,可以使用二维数组来模拟,每个元素代表一个单元格,初始值为0表示该位置为...

    AutoJs源码-数独算法

    AutoJs源码-数独算法。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3、...

    数独求解 ACM C++算法 用时0到7ms

    总之,这个数独求解算法使用了非递归的深度优先搜索,并结合栈和启发式选择,为ACM竞赛中的数独题目提供了一个高效的C++解决方案。其设计考虑了时间复杂度和内存使用,体现了编程竞赛中对算法优化和效率的追求。通过...

Global site tag (gtag.js) - Google Analytics