answer
2025-01-18 11:11:42
发布于:上海
#include <iostream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
using namespace std;
typedef vector<vector<int>> Matrix;
Matrix rotateClockwise(const Matrix& mat) {
Matrix result(3, vector<int>(3));
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
result[j][2 - i] = mat[i][j];
}
}
return result;
}
Matrix rotateCounterclockwise(const Matrix& mat) {
Matrix result(3, vector<int>(3));
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
result[2 - j][i] = mat[i][j];
}
}
return result;
}
Matrix flipHorizontal(const Matrix& mat) {
Matrix result(3, vector<int>(3));
for (int i = 0; i < 3; ++i) {
result[i] = mat[i];
reverse(result[i].begin(), result[i].end());
}
return result;
}
Matrix flipVertical(const Matrix& mat) {
Matrix result(3, vector<int>(3));
for (int i = 0; i < 3; ++i) {
result[i] = mat[2 - i];
}
return result;
}
string matrixToString(const Matrix& mat) {
string s;
for (const auto& row : mat) {
for (int val : row) {
s += to_string(val) + ",";
}
}
return s;
}
int main() {
Matrix start(3, vector<int>(3));
Matrix target(3, vector<int>(3));
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
cin >> start[i][j];
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
cin >> target[i][j];
queue<pair<Matrix, string>> q;
set<string> visited;
q.push({start, ""});
visited.insert(matrixToString(start));
while (!q.empty()) {
auto [current, operations] = q.front();
q.pop();
if (current == target) {
cout << operations << endl;
return 0;
}
if (operations.length() >= 10) continue;
// Apply operations
Matrix next;
// A: Rotate Clockwise
next = rotateClockwise(current);
if (visited.insert(matrixToString(next)).second) {
q.push({next, operations + "A"});
}
// B: Rotate Counterclockwise
next = rotateCounterclockwise(current);
if (visited.insert(matrixToString(next)).second) {
q.push({next, operations + "B"});
}
// C: Flip Horizontal
next = flipHorizontal(current);
if (visited.insert(matrixToString(next)).second) {
q.push({next, operations + "C"});
}
// D: Flip Vertical
next = flipVertical(current);
if (visited.insert(matrixToString(next)).second) {
q.push({next, operations + "D"});
}
}
cout << "Poland cannot into space!!!" << endl;
return 0;
}
这里空空如也
有帮助,赞一个