我正在研究minisat的来源,这里有一个跟随内联函数
typedef int Var;
inline Lit mkLit (Var var, bool sign) { Lit p; p.x = var + var + (int)sign; return p; }
将整数var(DIMAC文件的整数)作为输入重新输入并返回文字p,我不明白为什么用var添加var然后添加符号?你能帮忙理解一下吗?
答案 0 :(得分:0)
假设p.x
只是一个常规int,似乎正在发生的事情是var
映射到2*var
,如果sign
为false,则2*var + 1
1}},如果sign
为真。大概这样做的目的是在文字中,p.x % 2
将告诉你var
是否对应于否定或非否定变量,偶数p.x
对应于否定变量和奇数p.x
对应于非否定变量。原var
很容易被p.x/2
恢复。此函数允许您将(int,bool)对编码为单个int。