N-queensの問題に取り組んでいます。スタックを正しく充填するのが難しい。誰もが私に指針を与えることを望んでいた。N-Queens、LinkedList Stackを使用するJava
私の出力は異常です。ノードは7つしかありませんが、私の「成功」ブール値はそれが真であるために8つ必要です。そして、私が列を増やすので1,2と思ったとき、ヘッドノードは2,1であった。
私は対角線についても調べる必要があることを知っていますが、私は段階的にそれを取っています。
conflictCheckメソッドを使用する場合は、最初に取り組む必要があります。それは真実を返すことはありません(はい、紛争があります)。私が何かを見つけたらすぐに更新します。
Hurray
8, 1
7, 1
6, 1
5, 1
4, 1
3, 1
2, 1
編集:私はより多くの再帰的な試みのためのコードにいくつかの変更を加えました
。 私の新しい出力はこれです:
The stack
1, 1
End of stack
Pushing next node
The stack
2, 1
1, 1
End of stack
Moving over one column
The stack
2, 2
1, 1
End of stack
problem
Moving over one column
The stack
2, 3
1, 1
End of stack
これは、進行中のコード/仕事の一部です。その中に(conflictCheck)
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) {
return false;
}
}
else if (temp.getRow() ==temp.getNext().getRow() || temp.getColumn() == temp.getNext().getColumn() ||
diagonal(temp, temp.getNext())){
return true;
}
}
return false;
}
public static void mover(QueenNode n) {
System.out.println("Moving over one column");
n.setColumn(n.getColumn()+1);
queens.viewPieces();
}
public static void playChess(int k, int total) {
QueenNode temp= head;
while (temp != null) {
System.out.println("Pushing next node");
queens.push(k,1);
queens.viewPieces();
//success
if(k == 8){
System.out.println("Hurray");
success = true;
return;
}
//conflict between pieces, loops through entire board
while (conflictCheck()) {
if (head.getColumn() != 8) {
mover(head);
}
else {
queens.pop();
mover(head);
}
}
playChess(k+1, total);
}
}
public static void main(String[] args) {
queens.push(1, 1);
queens.viewPieces();
success = false;
playChess(2, total);
}
}
が、それらすべての競合としてマークされなければなりませんか? – jackie
私はいくつかの編集を行った – jackie
私はいくつかの編集を行った、私は紛争に対処する方法を把握しようとしている。競合があり、トップの列が8の場合は、それをポップアップして、次のトップの列を1だけ上に移動します。列が8でない場合は、トップの列を1だけ上に移動し、競合がないか再確認します。今、永遠のループがあります:/ – jackie