先打個草稿,今晚看書理解下,明天實現。ios
內容:編程
編程實現任意集合上二元關係的性質斷定。測試
要求:spa
能正確斷定任意二元關係的自反性、對稱性、傳遞性、反自反性和反對稱性。code
代碼:
/* * Author : Tob_yuhong * Function: 集合上二元關係性質斷定的實現,能正確斷定任意二元關係的自反性、對稱性、傳遞性、反自反性和反對稱性。 * 編譯環境: Code::Blocks 13.12 */ //分別將自反性、對稱性、傳遞性、反自反性和反對稱性編號爲Func一、Func2,...,一直到Func5。 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cstring> #include <vector> #include <fstream> using namespace std; const int LEN = 140 + 10; int arr[LEN][2+10]; //存儲集合元素 int relation[LEN][LEN]; //關係矩陣 int nnn; //集合元素個數 int num; //集合關係個數 void Func1(); void Func2(); void Func3(); void Func4(); void Func5(); int main() { // freopen("datain.txt", "r", stdin); cout << "請輸入集合中的元素個數 : " << endl; cin >> nnn; cout << "請輸入集合中的關係個數 : " << endl; cin >> num; cout << "請輸入集合中的關係元素,一共有" << num << "對關係" << "," << num*2 <<"個元素(請以整數形式輸入) : " << endl; memset(arr, 0, sizeof(arr)); memset(relation, 0, sizeof(relation)); int num1, num2; for(int i = 1; i <= num; i++) { cin >> num1 >> num2; arr[i][1] = num1; arr[i][2] = num2; relation[num1][num2] = 1; } cout << "輸出關係矩陣 : " << endl; for(int i = 1; i <= nnn; i++) { for(int j = 1; j <= nnn; j++) { cout << relation[i][j] << " "; } cout << endl; } cout << endl; cout << "判斷結論 : " << endl; //判斷是否知足自反性 Func1(); //判斷是否知足對稱性 Func2(); //判斷是否知足傳遞性 Func3(); //判斷是否知足反自反性 Func4(); //判斷是否知足反對稱性 Func5(); return 0; } void Func1() { bool flag = true; for(int i = 1; i <= nnn; i++) { if(relation[i][i] != 1) { flag = false; break; } } if(flag == true) { cout << "知足自反性" << endl; } else { cout << "不知足自反性" << endl; } } void Func2() { bool flag = true; for(int i = 1; i <= nnn; i++) { for(int j = 1; j <=nnn; j++) { if(relation[i][j] != relation[j][i]) { flag = false; } } } if(flag == true) { cout << "知足對稱性" << endl; } else { cout << "不知足對稱性" << endl; } } void Func3() { bool flag = true; for(int i = 1; i <= num - 1; i++) { for(int j = 2; j <= num; j++) { if(arr[i][2] == arr[j][1]) { int num1 = arr[i][1], num2 = arr[j][2]; if(relation[num1][num2] != 1) { flag = false; break; } } } if(flag == false) break; } if(flag == true) { cout << "知足傳遞性" << endl; } else { cout << "不知足傳遞性" << endl; } } void Func4() { bool flag = true; for(int i = 1; i <= nnn; i++) { if(relation[i][i] != 0) { flag = false; break; } } if(flag == true) { cout << "知足反自反性" << endl; } else { cout << "不知足反自反性" << endl; } } void Func5() { bool flag = true; for(int i = 1; i <= nnn - 1; i++) { for(int j = i + 1; j <= nnn; j++) { if(relation[i][j] == 1 && relation[j][i] == 1 && i != j) { flag = false; break; } } } if(flag == true) { cout << "知足反對稱性" << endl; } else { cout << "不知足反對稱性" << endl; } }運行結果示意:
測試樣例:ci
/*string
4
8
1 1
1 3
2 2
3 3
3 1
3 4
4 3
4 4
io
*/編譯
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。class