【问题标题】:Backtracking in nonogram solver seems to be in infinite loop非图求解器中的回溯似乎处于无限循环中
【发布时间】: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


    【解决方案1】:

    在操作 helpX 和 helpY 之间调用 backtracking() 对我来说是有问题的。如果从算法的定义中没有必要尝试以这种方式重新排序,则在调用 backtracking() 之前修改 helpX 和 helpY。

    【讨论】:

    • 从算法的定义上恐怕是有必要的。但是,我可能是错的,我不是 csp 的专家。无论如何......我还是尝试了它,它使整个程序崩溃。谢谢你的建议:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2013-08-07
    • 1970-01-01
    • 2020-09-09
    • 2021-03-31
    相关资源
    最近更新 更多