群的判定
#define max_int 100
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
bool Closed(int a[], int b[][max_int],int n) {
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int flag = 0;
for (int k = 0; k < n; k++)
{
if (a[k] == b[i][j])
flag = 1;
}
if (flag == 0)
{
return false;
}
}
}
return true;
}
int position(int a, int b[],int n) {
for (int i = 0; i < n; i++) {
if (a == b[i]) {
return i;
}
}
return -1;
}
int element(int a, int b, int D[][max_int],int x[],int n) {
return D[position(a, x, n)][position(b, x, n)];
}
bool judge(int a, int b, int c,int D[][max_int],int n,int x[]) {
int an_x, an_y;
an_x = element(a, b, D, x, n);
an_y = element(b, c, D, x, n);
if (element(an_x, c, D, x, n) == element(a, an_y, D, x, n)) {
return true;
}
else {
return false;
}
}
bool Unitary(int D[][max_int], int n, int x[]) {
int judge_left = 0, judge_right = 0;
for (int i = 0; i < n; i++)
{
int flag = 0;
for (int j = 0, k = 0; j < n, k < n; j++, k++)
{
if (D[i][j] != x[k]) {
break;
}
else {
flag++;
}
}
if (flag == n)
{
judge_left = 1;
}
}
for (int i = 0; i < n; i++)
{
int flag = 0;
for (int j = 0, k = 0; j < n, k < n; j++, k++)
{
if (D[j][i] != x[k]) {
break;
}
else {
flag++;
}
}
if (flag == n)
{
judge_right = 1;
}
}
if (judge_left == 1 && judge_right == 1) {
return true;
}
else {
return false;
}
}
bool judgeAll(int D[][max_int], int n, int x[]) {
int flag = 0;
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (D[i][j] == x[0])
flag++;
}
}
if (flag == n - 1)
return true;
else
return false;
}
int main() {
int a[max_int], D[max_int][max_int];
int n;
int flag = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int j = 0; j < n; j++)
{
for (int k = 0; k < n; k++)
{
cin >> D[j][k];
}
}
if (Closed(a, D, n)) {
cout << "满足封闭性" << endl;
flag++;
}
if (judge(a[0], a[1], a[2], D, n, a))
{
cout << "满足结合律" << endl;
flag++;
}
if (Unitary(D, n, a)) {
cout << "存在幺元" << endl;
flag++;
}
if (judgeAll(D, n, a)) {
cout << "每个元素都存在它的逆元" << endl;
flag++;
}
if (flag == 4) {
cout << "是群" << endl;
}
else {
cout << "不是群" << endl;
}
return 0;
}