C++中檢查二進位制矩陣的水平和垂直對稱性
假設我們有一個M x N階的二進位制矩陣。任務是檢查該矩陣是否水平對稱、垂直對稱或兩者兼有。如果第i行與第(M – i)行相同,則稱該矩陣為水平對稱;如果第j列與第(N – j)列相同,則稱該矩陣為垂直對稱。假設輸入矩陣如下所示:
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
這是水平對稱的。
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
這是垂直對稱的。
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
這是水平和垂直對稱的。
我們將分兩個階段解決這個問題。首先,我們將檢查矩陣是否水平對稱,如果是,則設定一個布林變數horizontal_flag = true,否則為false;如果矩陣垂直對稱,則設定vartical_flag = true,否則為false。如果兩者都為真,則答案將是完全對稱的。
示例
#include <iostream>
#define MAX 20
using namespace std;
void checkSymmetryLevel(int arr[][MAX], int N, int M) {
bool horizontal_flag = true, vartical_flag = true;
for (int i = 0, k = N - 1; i < N / 2; i++, k--) {
for (int j = 0; j < M; j++) {
if (arr[i][j] != arr[k][j]) {
horizontal_flag = false;
break;
}
}
}
for (int i = 0, k = M - 1; i < M / 2; i++, k--) {
for (int j = 0; j < N; j++) {
if (arr[i][j] != arr[k][j]) {
vartical_flag = false;
break;
}
}
}
if (!horizontal_flag && !vartical_flag)
cout << "This is not symmetric from any point of view";
else if (horizontal_flag && !vartical_flag)
cout << "This is not horizontally symmetric";
else if (vartical_flag && !horizontal_flag)
cout << "This is vertically symmetric";
else
cout << "This is symmetric in both direction";
}
int main() {
int mat[MAX][MAX] = {
{ 1, 1, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 } };
checkSymmetryLevel(mat, 3, 3);
}輸出
This is symmetric in both direction
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP