数独アルゴリズム
2424 ワード
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;
}
}