public class SomeQueens {
static Stack<Integer> s= new Stack<Integer>();
static int Solved = 0;
static int current = 0;
public static int solve(int n) { // n is 8
while(current < n) { // should I use current < n instead
for (int i = current; i < n; i++) {
if(validPosition(i)) {
s.push(i);
current = 0;
}
}
if(!validPosition(current)) {
if(s.empty()) {
break;
}
if(!s.empty()) {
s.pop();
current++;
}
}
if(s.size() == n) {
s.pop();
current++;
printSolution(s);// this is a method, but it shouldn't matter for this
Solved++;
}
}
return Solved;
}
public static boolean validPosition(int column) {
for(int row = 0; row < s.size(); row++)
if(s.get(row) == column || ((column - s.get(row)) == (s.size() - row)) ||
((s.get(row) - column) == (s.size() - row)))
return false; // there's a conflict
return true; // no conflict;
}
//it's called by int num = solve(n);
//sop("There're" + num + "sols to the" + n "queens prob");
Это подразделение моей программы для NQueens, но я, кажется, всегда получаю: Есть 0 решений проблемы 8-queens. Я пробовал отлаживать с помощью system.out.prints в основном методе, что заставило меня предположить, что в моем логическом методе что-то не так, но я не думаю, что он делает что-то неправильно. Я не уверен, что мой оператор while неверен или если прерывание внутри цикла while инициализировано, прежде чем что-либо будет сделано. Спасибо за помощь и руководство, и я сожалею, если моя программа и объяснения не имеет смыслаПолучение каждой комбинации Queens?
Почему не использовать рекурсивный? – user3437460
Кажется, нет оператора return для 'int solve (int n)'. Это не должно компилироваться. – Dawnkeeper
Я не могу использовать рекурсивный и извиняюсь за то, что не разместил это - теперь я это сделал. Извините за то, что я не прояснил ситуацию. – ExchangeChri