#include
#include
using namespace std;
// 判断自反性
bool isReflexive(vector& setA, vector<vector>& relationR) {
for (int i = 0; i < setA.size(); i++) {
bool flag = false;
for (int j = 0; j < relationR.size(); j++) {
if (relationR[j][0] == setA[i] && relationR[j][1] == setA[i]) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
}
return true;
}
// 判断对称性
bool isSymmetric(vector<vector>& relationR) {
for (int i = 0; i < relationR.size(); i++) {
bool flag = false;
for (int j = 0; j < relationR.size(); j++) {
if (relationR[i][0] == relationR[j][1] && relationR[i][1] == relationR[j][0]) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
}
return true;
}
// 判断传递性
bool isTransitive(vector<vector>& relationR) {
for (int i = 0; i < relationR.size(); i++) {
for (int j = 0; j < relationR.size(); j++) {
if (relationR[i][1] == relationR[j][0]) {
bool flag = false;
for (int k = 0; k < relationR.size(); k++) {
if (relationR[i][0] == relationR[k][0] && relationR[j][1] == relationR[k][1]) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
}
}
}
return true;
}
// 判断反自反性
bool isIrreflexive(vector& setA, vector<vector>& relationR) {
for (int i = 0; i < setA.size(); i++) {
for (int j = 0; j < relationR.size(); j++) {
if (relationR[j][0] == setA[i] && relationR[j][1] == setA[i]) {
return false;
}
}
}
return true;
}
// 判断反对称性
bool isAsymmetric(vector<vector>& relationR) {
for (int i = 0; i < relationR.size(); i++) {
for (int j = 0; j < relationR.size(); j++) {
if (relationR[i][0] == relationR[j][1] && relationR[i][1] == relationR[j][0] && i != j) {
return false;
}
}
}
return true;
}
int main() {
// 输入集合A
int sizeA;
cout << "请输入集合A的大小:";
cin >> sizeA;
vector setA(sizeA);
cout << "请输入集合A的元素:";
for (int i = 0; i < sizeA; i++) {
cin >> setA[i];
}
// 输入二元关系R
int sizeR;
cout << "请输入二元关系R的大小:";
cin >> sizeR;
vector<vector<int>> relationR(sizeR);
cout << "请输入二元关系R的元素(用空格隔开):" << endl;
for (int i = 0; i < sizeR; i++) {
int a, b;
cin >> a >> b;
relationR[i] = {a, b};
}
// 判断基本性质
if (isReflexive(setA, relationR)) {
cout << "关系R是自反的" << endl;
} else {
cout << "关系R不是自反的" << endl;
}
if (isSymmetric(relationR)) {
cout << "关系R是对称的" << endl;
} else {
cout << "关系R不是对称的" << endl;
}
if (isTransitive(relationR)) {
cout << "关系R是传递的" << endl;
} else {
cout << "关系R不是传递的" << endl;
}
if (isIrreflexive(setA, relationR)) {
cout << "关系R是反自反的" << endl;
} else {
cout << "关系R不是反自反的" << endl;
}
if (isAsymmetric(relationR)) {
cout << "关系R是反对称的" << endl;
} else {
cout << "关系R不是反对称的" << endl;
}
return 0;