Бесконечный цикл в Java, стеки и LinkedLists - PullRequest
0 голосов
/ 27 марта 2012

Я работаю над проблемой n-queens и проверяю то, что у меня есть, чтобы убедиться, что моя логика верна.Мой цикл перестает выводить и переходит в бесконечный цикл после настройки 2-й части ферзя, чтобы не было конфликта.

Я не думал, что получу бесконечный цикл с моей логикой, которая в основном: Push (1,1)

Проверка на конфликт

Если конфликт,отрегулируйте верхнюю королеву, если ее невозможно отрегулировать, выскочите, отрегулируйте новую вершину

Если нет конфликта и размер <8, нажмите (size + 1, 1) - что, очевидно, будет конфликтом</p>

Проверка на конфликт и т. Д.

    public static boolean conflictCheck() {
    QueenNode temp = head;
    //walk through stack and check for conflicts

    while(temp!=null) {
        //if there is no next node, there is no conflict with it
        if (temp.getNext() == null){
            System.out.println("No next node");
            if (queens.size() < 8 ) {
                System.out.println("No problems");
                return false;
            }
        }
        else if (temp.getRow() ==temp.getNext().getRow() || temp.getColumn() == temp.getNext().getColumn() ||
                diagonal(temp, temp.getNext())){
            System.out.println("There's a conflict");
            return true;
        }
    }
    return false;
}

public static void playChess() {
    System.out.println("Playing chess");
    if (conflictCheck()) {
        if (head.getColumn() == 8) {
            queens.pop();
        }
        if (!queens.isEmpty()) {
            System.out.println("Adjusting head");
            head.setColumn(head.getColumn()+1);
            System.out.println("Head is now " + head.getRow() + ", " + head.getColumn());
            playChess();

        }
    }
    else if (!conflictCheck() && queens.size() < 8) {
        System.out.println("Stack isn't full yet");
        queens.push(queens.size()+1,1);
        playChess();
        }
    else {
        success= true;
        System.out.println("Success");
        queens.viewPieces();
        return;
    }
}

public static void main(String[] args) {
    queens.push(1, 1);
    queens.viewPieces();
    success = false;
    playChess();
}

}

Мой вывод:

The stack
1, 1
End of stack
Playing chess
No next node
No problems
No next node
No problems
Stack isn't full yet
Playing chess
There's a conflict
Adjusting head
Head is now 2, 2
Playing chess
problem
There's a conflict
Adjusting head
Head is now 2, 3
Playing chess

1 Ответ

1 голос
/ 25 июня 2012

Отсутствовал дополнительный оператор else, который определял, когда что-то не было конфликтом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...