問題タブ [n-queens]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Pythonをバックトラックするアレンジメント
私はPythonでバックトラックを介してアレンジメントを生成する方法を理解しようとするのに苦労しています、それは彼らが大学で私たちに尋ねたものです
1からnまでの番号が付けられたn人(n <= 10)のグループが椅子の列に配置されますが、2人の隣人ごとにいくつかの利害の対立が現れました。対立している2人の間で、1人または多くても2人の他の人がとどまるように、人を置き換えるために可能なすべてのモダリティを表示します。
順列と女王のコードを変更することができましたが、条件をどこに置くかは本当にわかりません。たとえば、kは数字であり、kは文字列+1の前の数字とは異なる必要があり、次の番号+1
椅子に座っている人のリストは123 4です(3人未満では不可能です)1つの正しい解決策は1 342と3142になります
コードは次のとおりです。
java - 座標を取得する N * N クイーン アルゴリズム
N*N
少しひねったクイーンアルゴリズムを実装しようとしています。このバージョンでは、女王も騎士のように動くことができます...
すべてが正常に機能していますが、考えられるすべてのソリューションの座標を取得しようとしています。問題は、それを中に入れるとcol == n
、最後のものだけが印刷されることです。これを解決する方法のアイデアはありますか?
java - スタックとバックトラッキングを使用した Java の n-queens パズル
これは、Java の n-queens 問題に対する私のコードです。ただし、出力は 0 (この場合は 8 つのクイーンの解の数) ですが、92 になるはずです。スタックとバックトラッキングのみを使用することになっています (再帰なし!!)。私は本当に行き詰まっています!どんな助けでも大歓迎です!
c++ - 関数を呼び出すこの for ループを完了する方法
1D クイーンズ問題で、特定の for ループを完了まで続けようとして問題が発生しています。
まず、すべてに goto ステートメントを使用しました。現在、代わりに関数を使用して goto ステートメントを取り除こうとしています。最終的にはすべて削除しますが、NR (新しい行) とバックトラックに注目しています。
私が問題を抱えている for ループは、位置がクイーンにとって安全かどうかをチェックするループです。コメントで完了しない for ループを指摘します。
c++ - ブルートフォースで8つのクイーン1D配列を解決する方法は?
1Dアレイを使用し、ブルートフォースを使用するように8クイーンプログラムを変更する割り当てが与えられました(すでにバックトラックを実行しました)。私は次のコードを思いついた:
それは永遠にループし続けます、そして私は理由がわかりません。誰かが私を助けてくれませんか?
python - Find unique solutions of N-queens puzzle recursive algorithm
Hello all! How can I find the unique solutions of this recursive algorithm of N-queens puzzle? It finds only all solutions: on board 8x8 it will be 92 solutions, but unique is only 12 (the other solutions are translations and mirrored from this 12)
c++ - 配列にC++で連続した番号があるかどうかをどのように確認しますか?
これは基本的にエイトクイーンの問題ですが、1Dアレイでブルートフォースで解決します。サイズが8で、要素の範囲が0から7の配列(bという名前)があるとします。
次のように、配列内の各インデックスを8つのforループで初期化します。
このプログラムが行うことになっているのは、0から7までの数字のすべての組み合わせをチェックし、特定の条件に対してのみtrueを返すことです。92の解決策があるはずですが、これがおなじみのように聞こえるなら、そうあるべきです-それは力ずくの力を使った8クイーンの問題です。ここから、これが条件であると私が理解していることです。
配列に連続した数字の文字列があるかどうかを確認できるようにしたい。そのような:
[0 | 5 | 7 | 1 | 2 | 3 | 6 | 4]
ここで、要素b [3]、b [4]、およびb[5]は連続しています。数字の連続した文字列があるので、私はそれを望んでいません、私はfalseを返したいです(基本的に女王は攻撃しています)
また、次のような逆方向に連続する数字の文字列を持つ配列は必要ありません。
[0 | 5 | 7 | 3 | 2 | 1 | 6 | 4]
そして最後に、インデックスに2つ以上の数値を入れて、それらの間の数値を変更しただけで連続して見えるようにしたくありません。
[0 | 2 | 4 | 6 | 1 | 3 | 5 | 7]
b[0]とb[7]は「連続インデックス」の数値であるため、上記は受け入れられません(少なくとも2つのクイーンが互いに攻撃しているため)。
[6 | 1 | 3 | 0 | 4 | 7 | 5 | 2]
b[1]とb[4]も連続したインデックスにあるため、上記も受け入れられません。
同様に、値が交換されると、配列
[7 | 2 | 4 | 6 | 1 | 3 | 5 | 0]
[6 | 4 | 3 | 0 | 1 | 7 | 5 | 2]
また、受け入れられません。また、同じ番号を2つ以上持つことはできません。
私が抱えている問題は、チェック関数の作成にあります。1つのforループと1つのif-thenステートメントを使用する必要があると言われました。チェック関数は配列全体をそのまま取得できますか?もしそうなら、配列の右端の要素をどのように見て、連続したインデックスがあるかどうかを確認します(クイーンが攻撃しています)?私はこれを試しました:
しかし、これは機能しないだけでなく(300以上のソリューションが得られます)、私が言われているほど小さくはありません。
java - シミュレーテッド アニーリング N クイーンズ確率公式
n クイーン問題を解決するためのシミュレーテッド アニーリング アルゴリズムに問題があります。基本的に、私はもっと良いものを探すようにしていますが、それは問題なく機能しますが、式を実行して、「悪い」動きをするべきかどうかを確認します。私の理解では、式は e^(ボード状態の計算の変化)/CurrentTemperature です。この数値は、ランダムな double または float と比較する必要があります。乱数が方程式よりも大きい場合、アルゴリズムは「悪い」動きを取る必要があります。私が得ている問題は、式が常に1に近いか1を超えていることです。ここに私のコードの一部を示します(さらに提供する必要がある場合はお知らせください):
調べる変数を負にしたり、ボードの状態間の差の絶対値を取得したりするなど、多くのことを試しました。また、呼び出されている計算関数は基本的にボードをスキャンし、競合しているクイーンの数を int で返します。さらに説明が必要な場合はお知らせください。ありがとう
java - 再帰を使用した 8 つの非攻撃的クイーンズ アルゴリズム
8 クイーン問題のコーディングに問題があります。私はそれを解決するのに役立つクラスをコーディングしましたが、何らかの理由で何か間違っています。私は何が起こるべきかをある程度理解しています。
また、再帰を使用して解決する必要がありますが、私が読んだバックトラッキングの使用方法がわからないため、位置が正当かどうかを確認するメソッドで使用しました。
私のボードはString [] [] board = { { "O", "O"...
8行8列のetcです。概念的に間違っている場合や、Java の重大な間違いを犯している場合は、そう言ってください :D ありがとう!
c++ - ブール値でwhileループから抜け出す方法は?
ネストされたいくつかのwhileループから抜け出そうとしていますが、問題が発生しています。このプログラムを、特定の回数だけ実行される外側のループに分割してほしい。ブール値で試してみましたが、プログラムの終了が早すぎます。これは、1x1、2x2、3x3、...nxnクイーンを解決しているNクイーンの問題です。
これが私のコードです: