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;
}
}
分享到:
相关推荐
在这个压缩包中,包含了一个名为“数独算法.cpp”的C语言源代码文件,用于实现数独的求解算法。 首先,我们来看数独问题的表示。在C语言中,通常会用二维数组来表示数独的矩阵。例如,定义一个9x9的二维数组,数组...
数独的解决方法多种多样,其中一种常见的是基于回溯的非递归算法,这也是本项目所采用的方法。 在描述中提到的"非递归算法"通常指的是基于深度优先搜索(DFS)的策略。这种算法并不使用递归函数,而是利用栈或队列...
在编程领域,实现数独算法是一项有趣的挑战,尤其在易语言这样的中文编程环境中。易语言数独算法主要涉及以下几个关键知识点: 1. **数组和二维数据结构**:数独盘面通常表示为一个9x9的二维数组,其中包含9个3x3的...
在本文中,我们将探讨如何使用C++来实现数独算法,一种解决9x9数独谜题的方法。数独是一种逻辑游戏,目标是填满9x9的网格,使得每一行、每一列以及每一个3x3的小宫格(也称为子网格)都包含数字1到9,且每个数字在每...
易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码....
本项目是一个用Java实现的数独算法,结合了一个用户界面,便于玩家交互。 在Java中实现数独算法,通常涉及以下关键点: 1. **数据结构设计**:首先,我们需要一个数据结构来存储数独的当前状态。这通常是一个二维...
在IT领域,实现数独算法是编程挑战的一种,它涉及到搜索、回溯和条件判断等编程概念。本篇将深入讲解Java版的数独解算算法。 首先,我们需要创建一个表示数独盘面的数据结构。在Java中,我们可以使用二维数组来实现...
根据提供的信息,我们可以总结出两个不同的数独算法实现案例,分别使用C++语言编写。第一个案例提供了一个较为简单的数独生成方法,而第二个案例则展示了如何解决一个预定义的数独谜题。接下来,我们将详细解析这两...
数独是一种广受欢迎的逻辑游戏,它通过填充一个9×9的网格,使得每一行、每一列以及每一个3×3的小宫格(也...这个9x9数独算法不仅可以作为一个独立的编程练习,也可以作为学习数据结构、算法和递归思想的一个实例。
在给定的标题“matlab数独算法”中,我们讨论的是如何使用MATLAB编程语言来实现数独的自动填充算法。 MATLAB是一种高级编程环境,常用于数值计算、符号计算、数据可视化和图像处理等任务。由于其简洁的语法和强大的...
总的来说,基于舞蹈链的数独算法提供了一种高效的方法来解决这类问题。Python的灵活性和强大的数据处理能力使得实现这个算法变得相对简单。通过理解和实践这个算法,我们可以深入理解完全多归类问题的解决策略,并...
在Objective-C中实现9宫格数独算法,我们可以从以下几个方面进行探讨: 1. **数据结构**:首先,我们需要一个合适的数据结构来存储数独的当前状态。一种常见的方式是使用二维数组,如`int sudoku[9][9]`,其中0表示...
6. **标签解析**:“java数独”指的是使用Java语言实现数独算法,“数独题库”意味着程序可以生成多组不同的题目,而“数独生成”和“java数独题库高效生成”强调了算法的效率和生成大量题目的能力。 在压缩包文件...
数独算法是解决数独问题的方法,尤其对于计算机程序而言,它能有效地生成和解决任意难度的数独谜题。 一、基础算法:回溯法 数独的基础解法通常是采用回溯法,这是一种试错的方法。首先,对数独盘面进行扫描,找到...
9*9数独算法:采用递归算法遍历求解数独问题。如果有多个解会全部打印。空位输入0
总的来说,"C++数独算法"项目通过C++编程语言实现了一个基于回溯法的数独解算器,可以在VS2013环境中运行,为玩家提供了解决数独谜题的有效工具。通过深入学习和理解这个项目,开发者不仅可以掌握数独算法,还能提升...
JavaScript应用实例-数独算法.js
在C++中实现数独算法,主要涉及的是编程逻辑和算法设计。下面将详细介绍这个过程。 首先,我们需要创建一个表示数独盘面的数据结构。通常,可以使用二维数组来模拟,每个元素代表一个单元格,初始值为0表示该位置为...
AutoJs源码-数独算法。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3、...
总之,这个数独求解算法使用了非递归的深度优先搜索,并结合栈和启发式选择,为ACM竞赛中的数独题目提供了一个高效的C++解决方案。其设计考虑了时间复杂度和内存使用,体现了编程竞赛中对算法优化和效率的追求。通过...