私はプログラマブルでは新しく、N Queensの問題を解決するこの課題があります。 私のコードに何が間違っているのか分かりません。私はかなりの時間を費やしました。 誰かが私を正しい方向に導いて助けてくれますか?クイーンズはスタックを使ってJavaでエクササイズを行います
public static boolean isSafe(int[] col, int size, stack s)
{
int x;
for(int i = 1; i<=size; i++)
{
if(s.get(i)==i || ((s.get(i-1) - s.get(i)) == (col[i-1] - col[i])))
return false;
}
return true;
}
public static void solve(int size, stack s)
{
int[] column = new int[size];
int x = 0;
s.push(0);
column[0] = 0;
for(int i = 0; i<size; i++)
{
for(int j = 0; j<size;j++)
{
if(isSafe(column,size) == true)
{
s.push(i);
column[i] = j;
}
else
{
x = s.pop();
if(x+1<size)
{
column[i] = x+1;
s.push(x+1);
}
else
{
j=0;
column[i] = j;
s.push(i+1);
}
}
}
}
if(s.size() == size)
printBoard(column, size);
}
スタッククラス、プッシュ、ポップ、大きさを持って、機能を取得する(リターンはint型とプッシュ機能のためのパラメータがint型である)
私はバックトラックとのスタックを使用してそれを解決する必要があり、再帰はありません。
編集:ところで、私はボードが他の印刷された私は何を取得取得し、1に
if(s.size() == size)
printBoard(column, size);
置き換えサイズの変数を変更した場合。
編集: 問題はプッシュとポップですが、アルゴリズムはかなり正しくありません。なぜなら、私はスタック内の要素が1つしかないからです。
もう少し具体的にしてください。何がうまくいかないのですか?間違いはありますか?あるいは、間違った答えを得るだけですか? –
@SimonAndréForsberg私のコードに何か問題がありますが、エラーは発生していません。しかし、ボードを印刷するためにprint関数を呼び出すと、何も表示されません。 – b3gun
あなたのロジックは、isSafe(column、size)== trueのチェックに向いているように見えますが、代わりにfalseをテストしています。 – phatfingers