- 私はスタックの独自の実装を使用しています。
- 再帰を使うべきではありません。
私のコード:
public static void solve(int bsize)
{
stack queenLoc = new stack();
int y=0;
int count=0;
boolean done = false;
while(done == false && queenLoc.size() != bsize)
{
queenLoc.push(count);
if(!isSafe(bsize,queenLoc,count))
{
while(queenLoc.getTop() == bsize)
{
y = queenLoc.pop();
count--;
}
if(queenLoc.top != null)
{
queenLoc.push(queenLoc.pop()+1);
count++;
}
else
{
queenLoc.push(y+1);
count++;
}
}
else if(queenLoc.size() == bsize)
{
done = true;
}
else
{
count++;
queenLoc.push(count);
}
}
queenLoc.showAll();
if(queenLoc.size() == bsize)
printBoard(bsize, queenLoc);
}
public static boolean isSafe(int bsize, stack s,int count)
{
for(int i = 1; i<s.size(); i++)
{
if(s.getTop() == s.get(i) || s.getTop()+count == s.get(i)+s.size() || s.getTop()-count == s.get(i)-s.size())
return false;
}
return true;
}
実際に何が起こっているのかわかりません。位置が間違っていて、printBoard 関数は最初の行にのみクイーンを印刷しています。私は実際に多くの可能性を試しましたが、少し混乱しました。
誰でも私を正しい方向に向けて、私のコードのどこに問題があるか教えてもらえますか? スタックを使用して列を格納し、「カウント」変数をスタック クラスに格納して、どの行を指すかを指定しています。