【发布时间】:2017-04-08 15:28:23
【问题描述】:
我正在尝试用 Java 编写非图求解器来完成学校作业。它适用于所有提供的输入,除了一个。我的代码在 github https://github.com/farkadav/Nonogram-solver
在 CSPSolver 中,我求解非图。考虑到 github 上的文本文件中的约束,我生成所有可能的行/列组合,然后我检查弧的一致性,然后我试图通过回溯找到解决方案。我也输出了它应该如何解决。当我尝试解决 dino.txt 时,我的回溯功能似乎进入了无限循环,解决了第 11 行和第 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
【问题讨论】:
标签: java algorithm artificial-intelligence backtracking constraint-programming