Привет, я делаю решатель kenken, который представляет собой головоломку, похожую на судоку. У меня есть структура клетки, в которой есть ряд ячеек для клетки. Я хочу применять ограничения всякий раз, когда пытаюсь определить значение клетки. Для этого я каждый раз вызываю в своей головоломке ограничение «косуля / колонна / клетка».
Однако я столкнулся с проблемой ограничения клетки. Вот мой код для всех 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;
}
Теперь я застрял здесь в своем подходе ... я не знаю, как перейти к проверке ограничений клетки. это то, что я пытался, но не уверен, что мне не хватает и что делать дальше.
cellToCageMapper
и для чего предназначено полеplaceHolders
), и я также не знаю, что он имел в виду. Вам нужно будет объяснить оба из них, чтобы ответить на вопрос. - person Andrzej Doyle   schedule 08.10.2012