こんにちは私は数独のようなパズルであるケンケンソルバーを作っています。私はケージのセルの数を持っているケージ構造を持っています。ケージの値を試しているときはいつでも制約を適用したいと思います。このために、私は毎回パズルに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;
}
今、私は私のアプローチでここで立ち往生しています..私はケージの制約チェックに行く方法がわかりません。これは私が試みたものですが、何が欠けているのか、次に何をすべきかわかりません。