如何在布尔可满足性表达式中保存和比较值?

时间:2011-11-11 04:27:45

标签: c algorithm boolean

在这样的问题中,enter image description here

如果我使用递归解决C中的问题,我必须找到满足表达式的X1,X2和X3的所有TRUE或FALSE值,我将如何比较对齐(变量是否不像第一个子句中的X2)反对实际的真假值?我可以使用0和1并递归尝试所有排列,但我不确定如何实际计算这个。

2 个答案:

答案 0 :(得分:5)

我不完全确定你的问题,但你有4个布尔值,可以用4位表示。通过利用积分的内部表示,您可以在for循环中进行检查以检查所有可能的组合:

for( int i = 0; i < 16; ++i ) // That's 2^4
{
    int x1 = i & 1;
    int x2 = i & 2;
    int x3 = i & 4;
    int x4 = i & 8;

    if( ( x1 || !x2 || !x3 ) && ( x1 || x2 || x4 ) )
        ... the expression holds for this combination, store it somewhere ...
}

答案 1 :(得分:1)

bool x1[2]={false,true};
bool x2[2]={false,true};
bool x3[2]={false,true};
bool x4[2]={false,true};
for(int i1=0;i1!=2;i1++)
{
for(int i2=0;i2!=2;i2++)
{
for(int i3=0;i3!=2;i3++)
{
for(int i4=0;i4!=2;i4++)
{ if((x1[i1]||!x2[i2]||!x3[i3])&&(x1[i1]||x2[i2]||x4[i4]))
.......the expression holds, do something you need
}
}
}
}

这个答案的想法与K-ballo相同,但显然,他有更聪明的代码。