我试图测试集合的关系(对)是否是反对称意义: 如果对于X中的所有a和b,则集合X上的二元关系R是反对称的 如果R(a,b)和R(b,a),那么a = b, 或者,等效地, 如果R(a,b)的≠b,那么R(b,a)就不能成立。
antisymetric:
set holds to true
for each pair(e,f) in b
if pair(f,e) is in b
if f is not e
set holds to false
break
我做错了什么?
这是我的功能以及主要的示例测试:
void antiSymmetric(int b[], int sizeOfB)
{
bool hold = true; // set hold to true
for(int i = 0; i < sizeOfB;) // for each pair (e,f) in b
{
if(hold == false)
{
cout << "AntiSymmetric - No" << endl;
break; //Did not find (e,e) in b
}
for(int j = 0; j < sizeOfB;)
{
if(b[i] == b[j+1] && b[i+1] == b[j]) //If true, then pair(f,e) exists
{
if(b[i+1] != b[i]) //If true, relation is antisymmetric
{
hold = true;
break;
}
else
{
hold = false;
j = j + 2;
}
}
else
{
hold = false;
j = j + 2;
}
}
i = i + 2;
}
if(hold == true)
cout << "AntiSymmetric - Yes" << endl;
}
int main()
{
int set4[8] = {1, 2, 3, 4, 5, 6, 7, 8};
int rel4[20] = {1, 7, 2, 5, 2, 8, 3, 6, 4,
7, 5, 8, 6, 6, 1, 1, 2, 2);
cout << "Set 4: " << endl;
antiSymmetric(rel4, 20);
return 0;
}
答案 0 :(得分:0)
假设您的b
数组为{ 1, 2, 3, 4 }
。在i == 0
和j == 2
时,条件b[i] == b[j+1] && b[i+1] == b[j]
会缩减为1 == 4 && 2 == 3
,这是错误的。因此,您可以使用else
分支并设置hold = false
。但是这个测试没有反驳该集的反对称性。在这种情况下,您错误地设置了hold
。