嗨,我正在制作一个kenken求解器,它就像数独一样是一个谜题。我有一个笼子结构,其中有多个单元格用于笼子。每当我尝试为笼子设置值时,我都想应用约束。为此,我每次都将 roe/column/cage 约束称为我的难题。
但是,我对这个问题感到震惊。这是我所有 3 个约束的代码。对于笼子约束,我想查看特定单元格笼子的所有单元格,看看通过的数量是否满足我们的标准。
//Row Constraint Check: Checks if num is an acceptable value for the given Row
public static boolean rowConstraintCheck(int rowIndex, int num){
for(int columnIndex = 0; columnIndex < puzzleDimension; columnIndex++){
if(puzzleArray[rowIndex][columnIndex] == num){
return false;
}
}
return true;
}
//Column Constraint Check: Checks if num is an acceptable value for the given Column
public static boolean columnConstraintCheck(int columnIndex, int num){
for(int rowIndex = 0; rowIndex < puzzleDimension; rowIndex++){
if(puzzleArray[rowIndex][columnIndex] == num){
return false;
}
}
return true;
}
//Cage constraint Check: Checks if num is an acceptable value for the given Cage
public static boolean cageConstraintCheck(int rowIndex, int columnIndex, int num){
if(true){
int cageToCell = cellToCageMapper[rowIndex][columnIndex];
String currentOperator = cages.get(cageToCell).cageOperator;
int currentTotal = cages.get(cageToCell).cageValue;
int numberOfCages = cages.get(cageToCell).placeHolders.length;
//System.out.println(rowIndex+"."+ columnIndex+"."+ cageToCell +"."+ currentOperator +"."+ currentTotal +"."+ numberOfCages);
int flagNonZeroCages = 0;
for(int j=0;j<numberOfCages;j++) {
int tempIndex = cages.get(cageToCell).placeHolders[j];
int tempCellRow = (int) (Math.floor(tempIndex/puzzleDimension));
int tempCellCol = (tempIndex % puzzleDimension);
if(puzzleArray[tempCellRow][tempCellCol] != 0){
flagNonZeroCages++;System.out.println("bingo"+j);
}
}
if(flagNonZeroCages == numberOfCages){
System.out.println("bingo");
}
System.out.println();
return true;
}
return false;
}
现在我被困在我的方法中......我不知道如何进行笼子约束检查。这是我尝试过的,但不确定我缺少什么以及接下来要做什么。