本文整理汇总了Golang中dpll/assignment.Assignment.PopAssign方法的典型用法代码示例。如果您正苦于以下问题:Golang Assignment.PopAssign方法的具体用法?Golang Assignment.PopAssign怎么用?Golang Assignment.PopAssign使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类dpll/assignment.Assignment
的用法示例。
在下文中一共展示了Assignment.PopAssign方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: DpllTimeout
func DpllTimeout(cdb *db.DB, a *assignment.Assignment, b *Brancher, m *db.Manager, adapt *Adapter, timeout <-chan time.Time) *guess.Guess {
nVar := a.Guess().Len()
aStack := make([]dpllStackNode, nVar)
top := -1
for {
top++
aStack[top].l = b.Decide(cdb, a)
aStack[top].Flipped = false
a.PushAssign(aStack[top].l.Val, aStack[top].l.Pol)
for {
select {
case <-timeout:
return nil
default:
}
status := cdb.Bcp(a.Guess(), *aStack[top].l, m)
if status == db.Conflict {
// BackTrack
for aStack[top].Flipped == true {
top--
a.PopAssign()
}
if top < 0 {
return nil
}
// Flip the assignment
a.PopAssign()
aStack[top].l.Flip()
aStack[top].Flipped = true
a.PushAssign(aStack[top].l.Val, aStack[top].l.Pol)
// Reconfigure if neccessary
if adapt != nil {
adapt.Reconfigure(cdb, b, m)
}
} else if status == db.Sat {
return a.Guess()
} else {
break
}
}
}
panic("Dpll is broken")
}