我的回滚系统中有错误吗?

时间:2014-07-25 09:39:18

标签: commit rollback constraint-programming

我有一组未分配的变量,通过分支和传播,我想找到正确的值赋值。当传播失败时,我会回传并撤消传播。要撤消传播,我使用提交/回滚系统,其中多个回滚将突破多个提交。有一个错误,我想知道我是否在正确的时间调用提交和回滚? propagate(),commit()和rollback()不会干扰赋值数组。

i = 0;
while (i>=0 && i<var.length) {
    if (assignment[var[i]] == "unassigned") {
        commit();
        assignment[var[i]] = 1;
        if (propagate()) {
            i++;
        }
        continue;
    }
    if (assignment[var[i]] == 1) {
        rollback();
        assignment[var[i]] = 0;
        if (propagate()) {
            i++;
        }
        continue;
    }
    // assignment[var[i]] == 0 
    assignment[var[i]] = "unassigned";
    i--;
}

不知怎的,我认为这应该有效,但另一方面,bug必须在某个地方。

1 个答案:

答案 0 :(得分:0)

上面的代码是正确的。我在其他地方发现了这个错误。