私は、可能なすべての値を四角で試して、それが解決策につながっていない場合は逆戻りします。私はほとんど動作しているアルゴリズムを持っていると信じていますが、これまでは16セルのパズルの行0、2、3でしか動作しませんでした。数独アルゴリズムが正しく逆戻りしない
現在、3番目の数独ルールはチェックされず、列と行のみがチェックされます。しかし、それでも行と列のルールに従うパズルを返す必要があります。そして、checkBoxメソッドが記述されると、パズルを解くことができます。私はどこでここでうんざりしたのですか?いくつかの例と
EDIT:
{1, 2, 0, 0},
{0, 4, 0, 0},
{0, 0, 1, 0},
{0, 0, 3, 2}
を入力するためのプログラムは
{1, 0},
{2, 0}
の入力について
1 2 4 3 4 4 4 4 2 3 1 4 4 1 3 2
を返します0
正しく解決します。それは未解決のパズルを返す
{ 1, 0, 3, 4, 0, 0 },
{ 4, 0, 6, 0, 0, 3 },
{ 2, 0, 1, 0, 6, 0 },
{ 5, 0, 4, 2, 0, 0 },
{ 3, 0, 2, 0, 4, 0 },
{ 6, 0, 5, 0, 0, 2 }
の入力のために
EDIT:問題は、それがスペースをリセットしていなかったということでした
public boolean checkRow(int[]row){
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i < row.length;i++){
if(!set.add(row[i]) && row[i]>0){//Duplicate?
return false;
}
}
return true;
}
具体的には機能しない例を示してください。 –
@ScottHunter私はいくつかの例を追加しました – realmature
'checkRow'と' checkColumn'は、現在の行/列に '0'が含まれていないことを確認していますか?あなたの再帰の縮退事例は、あまり定義されていないように思われます。これは、最後のインスタンスで未解決のパズルを返すアルゴリズムを説明します。私はあなたの 'return true'が' return solved'である必要があると思っています。あなたのベースケースのために 'solve 'の値を更新する必要があります。 – nbrooks