Ограничение клетки для головоломки типа судоку

Привет, я делаю решатель 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;
}

Теперь я застрял здесь в своем подходе ... я не знаю, как перейти к проверке ограничений клетки. это то, что я пытался, но не уверен, что мне не хватает и что делать дальше.


person CodeMonkey    schedule 08.10.2012    source источник
comment
Какая у вас настоящая проблема в настоящий момент? Как код, который вы вставили, не соответствует вашим требованиям?   -  person Andrzej Doyle    schedule 08.10.2012
comment
@AndrzejDoyle извините за то, что был менее описательным ... добавил больше деталей ... в основном я застрял ... не знаю, что делать и как делать ... я только что добавил свою попытку здесь ...   -  person CodeMonkey    schedule 08.10.2012
comment
Это по-прежнему ничего не говорит. Как ваш код дает сбой, на каких типах ввода? Какой результат вы получили и чего ожидали? На данный момент я не могу сказать, что делает ваш код (я не знаю, что содержит cellToCageMapper и для чего предназначено поле placeHolders), и я также не знаю, что он имел в виду. Вам нужно будет объяснить оба из них, чтобы ответить на вопрос.   -  person Andrzej Doyle    schedule 08.10.2012
comment
Могу ли я разместить здесь свою полную программу?   -  person CodeMonkey    schedule 08.10.2012
comment
Вы можете опубликовать это, но не ждите, что это сильно поможет. По-прежнему неясно, какую четко сформулированную проблему вы хотите решить.   -  person hcarver    schedule 08.10.2012