我有一组未分配的变量,通过分支和传播,我想找到正确的值赋值。当传播失败时,我会回传并撤消传播。要撤消传播,我使用提交/回滚系统,其中多个回滚将突破多个提交。有一个错误,我想知道我是否在正确的时间调用提交和回滚? 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必须在某个地方。
答案 0 :(得分:0)
上面的代码是正确的。我在其他地方发现了这个错误。