描述:简言之为判断各种对称性
思路:1,将pA当成二维数组使用
2,水平和垂直比较简单,从左到右和从上到下依次比较即可
3,对角对称和反对角对称我使用的是y=x+b函数的对称性质,高中数学知识
4,旋转对称看着吓人,其实就是点的对称,如果是偶数的话,没关系直接当对称点存在就行,只不过这个矩阵里看不到罢了
int checkHorSym(char **pA, int n) {//水平对称性
int i;
for (i = 0; i < n; i++) {
int right = 0;
int left = n- 1;
while (right <= left) {
if (pA[i][right] != pA[i][left]) {
return 0; // 当前字符串不是水平对称的。
}
right++;
left--;
}
}
return 1; // 所有字符串都是水平对称的。
}
int checkVerSym(char **pA, int n){//垂直对称性
int i;
for(i=0;i<n;i++){
int up=0;int down=n-1;
while(up<=down){
if(strcmp(pA[up],pA[down])!=0){
return 0;
}
up++;down--;
}
}
return 1;
}
int checkDiaSym(char **pA, int n){//对角对称性
int i;int j;
for(i=0;i<n-1;i++){
for(j=i+1;j<n-1;j++){
if(pA[j][i]!=pA[i][j]) return 0;
}
}
return 1;
}
int checkAntiDiaSym(char **pA, int n){
int i;int j;
for(i=0;i<n-1;i++){
for(j=i;j<n-1;j++){
if(pA[j][i]!=pA[n-1-i][n-1-j]) return 0;
}
}
return 1;
}
int checkRotSym(char **pA, int n){
int i;int j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(pA[n-1-i][n-1-j]!=pA[i][j]) return 0;
}
}
return 1;
}