酷代码 AI
菜单
服务商

C++ 实现正方形黑白瓦片图案最小转换方法求解

```cpp #include <iostream> #include <vector> using namespace std; // 旋转90度 vector<string> rotate90(const vector<string>& pattern) { int n = pattern.size(); vector<string> result(n, string(n, ' ')); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { result[j][n - 1 - i] = pattern[i][j]; } } return result; } // 旋转180度 vector<string> rotate180(const vector<string>& pattern) { return rotate90(rotate90(pattern)); } // 旋转270度 vector<string> rotate270(const vector<string>& pattern) { return rotate90(rotate180(pattern)); } // 反射 vector<string> reflect(const vector<string>& pattern) { int n = pattern.size(); vector<string> result = pattern; for (int i = 0; i < n; i++) { for (int j = 0; j < n / 2; j++) { swap(result[i][j], result[i][n - 1 - j]); } } return result; } // 判断两个图案是否相同 bool isSame(const vector<string>& a, const vector<string>& b) { int n = a.size(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[i][j] != b[i][j]) { return false; } } } return true; } int main() { int n; cin >> n; vector<string> original(n), target(n); // 读取原始图案 for (int i = 0; i < n; i++) { cin >> original[i]; } // 读取目标图案 for (int i = 0; i < n; i++) { cin >> target[i]; } // 转90度 if (isSame(rotate90(original), target)) { cout << 1 << endl; } // 转180度 else if (isSame(rotate180(original), target)) { cout << 2 << endl; } // 转270度 else if (isSame(rotate270(original), target)) { cout << 3 << endl; } // 反射 else if (isSame(reflect(original), target)) { cout << 4 << endl; } // 组合 else { vector<string> reflected = reflect(original); if (isSame(rotate90(reflected), target)) { cout << 5 << endl; } else if (isSame(rotate180(reflected), target)) { cout << 5 << endl; } else if (isSame(rotate270(reflected), target)) { cout << 5 << endl; } // 不改变 else if (isSame(original, target)) { cout << 6 << endl; } // 无效转换 else { cout << 7 << endl; } } return 0; } ``` ######[AI问答 | 817点数解答 | 2025-11-25 19:03:09]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]