問題タブ [recursive-backtracking]
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.
java - 数独を解く - バックトラッキングアルゴリズムがバックトラックしない - Java
バックトラックに基づく数独解決アルゴリズムを実装する方法について、私は何時間もかけて考えてきました。ただし、問題が発生しました。エラーが発生すると、アルゴリズムはバックトラックしません。物事をできるだけ単純にするために、これが私の主な機能です。
Sudoku クラスのコンストラクターは空のボードを作成し、コンピューターは Sudoku のルールを満たす数字でグリッド全体を埋める必要があります。
FindEmptyCell メソッドは、行フィールドと列フィールドの値を、最初の空いているセルのインデックスと等しくなるように設定します。このグリッドは、プログラムが false を返したときの状態を表しています。
この時点までのすべてが私のアルゴリズムで正しいかどうか教えてください。もしそうなら、それはエラーが補助機能のどこかにあることを意味します。たとえば、フィールドを使用してインデックスを格納してもバックトラッキングが防止されないかどうかはわかりません。
どんな助けでも大歓迎です。また、この投稿がこの掲示板のルールにある程度違反している場合は、反対票を投じる前にコメントでお知らせください。今後はこのような間違いを避けたいと考えています。
編集:残りの方法を提供:
javascript - Python - 複数の割り当てを JavaScript の構文に変更し、指定された文字列の正しい順列を取得する方法
バックトラックについて検索するのに少し問題があります。まず第一に、以下にリンクするコードで、JavaScript プログラマーとしては非常に奇妙な構文を見つけました。
このページの情報を使用してa[i]
、 「a[l]
変数と変数に割り当てる」という意味であることがわかりました。これの使い方が理解できません。同じ価値観だと思っていました。最初に値を に代入して取得しようとすると、両方の変数で になります。a[l]
a[i]
a[l]
a[l]
a[i]
これは Python コードですが、同じ原理を使用して JavaScript に変換したいと考えています。
次のリンクから IDE にアクセスできます: https://ide.geeksforgeeks.org/ASvO8MoGQr。
このコードが行うことは、文字列「aab」の順列値を取得することです。
たとえば、最初の文字列として「aab」を使用すると、次の結果が得られます: aab aba aab aba baa baa .
「JavaScript」を使ってみたところ、次のようになりました。
私が得る結果はです["aab", "aab", "aab", "aab", "aab", "aab"]
。
JSFiddle へのリンク: https://jsfiddle.net/xrfkt9qj/1/。
EDIT1 @jp_data_analysis の回答を試しましたが、まだ悪い結果が返されます: https://jsfiddle.net/zurvm0xy/。
スクリプトのEDIT2 ES6 バージョン: https://jsfiddle.net/zurvm0xy/4/。
重複ではありません。変数のスワッピングは、この問題の最初の部分にすぎません。記事全文をお読みください。
c++ - 数独プログラムが出力を返さないのはなぜですか?
そこで、バックトラッキング アルゴリズムを使用して数独を実装しようとしました。私のコードが予期した出力を与えない理由がわかりません。
私がしたことは、数独の空のセル (0 で表される) をチェックするループを作成したことです。それが見つかると、その座標が possibleEntriescheck() という関数に渡されます。この関数は、possibleEntries[9] と呼ばれるグローバルに宣言された配列に、座標が最初に渡されるセルに入力できる可能性のある数字を書き込みます。
これらのビデオからこのアルゴリズムを学びました: https://www.youtube.com/watch?v=NuodN41aK3g https://www.youtube.com/watch?v=QI0diwmx3OY
予想される出力は、解かれた数独です。期待通りの性能を発揮しません。むしろ凍る。少しの助けが大きな意味を持つでしょう。ありがとうございました。
arrays - 多次元配列を渡すときにエラーが表示される理由がわかりません
このエラーが発生する理由を調べようとしましたが、何も見つかりませんでした。これは、バックトラッキングによる n-queen 問題のコードです。しかし、これは問題ではありません。このエラーが発生する理由と解決方法を知りたいです。
new.C:5:32: エラー: 宣言されていない識別子 's' の使用 bool attack_checking(int arr[][s], int s, int i, int j) { ^
new.C:32:22: エラー: 宣言されていない識別子 's' の使用
bool Queen(int arr[][s], int l) { ^
2 つのエラーが発生しました。