私は学校の宿題のためにJavaでノングラムソルバを書こうとしています。これは、1つを除くすべての入力に対して機能します。私のコードはgithubにありますhttps://github.com/farkadav/Nonogram-solverノングラムソルバのバックトラックが無限ループになっているようです
CSPSolver私はノングラムを解きます。私はすべての可能な行/列の組み合わせを生成し、github上のテキストファイルにある制約を与えてから、アークの一貫性をチェックしてから、バックトラックによって解決策を見つけようとしています。私はそれがどのように解決されるべきかを出力しています。私がdino.txtを解こうとすると、私のバックトラック関数は11行目とcolと15列を解く無限ループになるようです。ここにそのメソッドのコードがあります。
public void backtracking(){
if(orderedVars.isEmpty()){
String[] solString = new String[rowDim];
for(Line line : rowSolution){
solString[line.position] = new String();
for(int j=0; j<colDim; j++){
solString[line.position] +=line.value[j];
}
}
String solution = new String();
for(String sol : solString){
solution += sol +"\n";
}
solutions.add(solution);
return;
}
CSPVariable cspVar = orderedVars.poll();
for(char[] var : cspVar.storage){
if(consistent(var,cspVar)){
if(cspVar.Row){
rowSolution[helpX++] = new Line(var,cspVar.position,cspVar.Row);
backtracking();
rowSolution[--helpX] = null;
} else{
colSolution[helpY++] = new Line(var,cspVar.position,cspVar.Row);
backtracking();
colSolution[--helpY] = null;
}
}
}
orderedVars.add(cspVar);
}
私はそれが正確に何を引き起こしているのかわかりませんが、どんな助けもありがたいです。何か不明な点がある場合は、こちらへのリンクですhttp://cw.fel.cvut.cz/wiki/courses/a4b33zui/task2-malovane-krizovky-en
私は恐れてアルゴリズムの定義から必要です。しかし、私は間違っている可能性があります。とにかく...とにかく試してみると、プログラム全体がクラッシュします。提案ありがとう :) – lobito