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;
}
}
分享到:
相关推荐
制作了一个简单的数独游戏,使用了非递归的算法数独结果。
数独算法,注释很详细,可以满足数独游戏的需要。
易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码.rar 易语言源码易语言数独算法源码....
数独算法: 用C++完成数独99宫格的解! 可以参考一下!
易语言数独算法源码,数独算法,核心算法,写出一行
数独算法Java版。 有注释。 编译已过。
9*9数独算法:采用递归算法遍历求解数独问题。如果有多个解会全部打印。空位输入0
Objective-C 9宫格数独算法
JavaScript应用实例-数独算法.js
AutoJs源码-数独算法。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3、...
c++数独算法,核心思想是暴利穷举+回溯
暴力破解算法暴力破解算法暴力破解算法暴力破解算法暴力破解算法暴力破解算法暴力破解算法
数独的一种实现,实现了简单的数据算法,提供了界面
练习一下算法 , 可以在控制台显示试数的过程 ,缓解一下紧张的神经和精神。答案在第49557次试数,也许有多个结果,不过我没耐心等待。
使用代码实现数独的算法,很实用简单,适合学习
NULL 博文链接:https://namas.iteye.com/blog/1733440
用matlab实现数独填充的算法,完整源代码。仅供参考,欢迎批评。用C写会更简单些的。
自编算法 用于9×9数独的解算 手工编辑 调试窗口输出 为小孩学习准备的 VC 9×9
流程思想: 从data.txt文件中获取数独数据: 将数独转化为舞蹈链 解决舞蹈链 与第2步骤相反,把舞蹈链数据转化为数独
使用C语言展示数独游戏的算法,对于学习C语言和了解数独算法都有帮助