有人弄出来吗?

一片落叶掉进了回忆的流年。
2015-10-08 20:02
2015-10-08 21:12
2015-10-09 10:12
2015-10-10 11:49
2015-10-10 17:02
2015-10-10 18:23

程序代码:#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
typedef vector<unsigned> linear_array;
typedef vector<linear_array> dyadic_array;
class Matrix {
private:
char flag;
dyadic_array data;
size_t length, angle;
void rotate90(size_t x_pos, size_t y_pos, size_t range);
void rotate(size_t range, size_t x_pos, size_t y_pos);
public:
Matrix(size_t length, char flag) : length(length), flag(flag), angle(0) {}
void rotate();
bool operator ==(const Matrix &matrix) const;
friend istream &operator >>(istream &is, Matrix &matrix);
friend ostream &operator <<(ostream &os, const Matrix &matrix);
};
void Matrix::rotate90(size_t x_pos, size_t y_pos, size_t range) {
dyadic_array array(range, linear_array(range));
for (size_t x = 0; x != range; ++x) {
for (size_t y = 0; y != range; ++y) {
array[x][y] = this->data[x_pos + range - 1 - y][y_pos + x];
}
}
for (size_t x = 0; x != array.size(); ++x) {
for (size_t y = 0; y != array[x].size(); ++y) {
this->data[x_pos + x][y_pos + y] = array[x][y];
}
}
}
void Matrix::rotate(size_t range, size_t x_pos, size_t y_pos) {
rotate90(x_pos, y_pos, range);
if (range % 2 || range <= 2) return;
size_t length = range / 2;
rotate(length, x_pos, y_pos);
rotate(length, x_pos, y_pos + length);
rotate(length, x_pos + length, y_pos);
rotate(length, x_pos + length, y_pos + length);
}
void Matrix::rotate() {
this->angle += 90;
rotate(this->length, 0, 0);
}
bool Matrix::operator ==(const Matrix &matrix) const {
return this->length == matrix.length && this->data == matrix.data;
}
istream &operator >>(istream &is, Matrix &matrix) {
for (size_t i = 0; i != matrix.length; ++i) {
matrix.data.push_back(linear_array(matrix.length));
for (size_t j = 0; j != matrix.length; ++j) {
is >> matrix.data[i][j];
}
}
return is;
}
ostream &operator <<(ostream &os, const Matrix &matrix) {
os << "Matrix(" << matrix.flag << ", " << matrix.angle << ") :" << endl;
for (size_t i = 0; i != matrix.length; ++i) {
for (size_t j = 0; j != matrix.length; ++j) {
os << matrix.data[i][j] << ' ';
}
os << endl;
}
return os;
}
int main(void) {
bool flag;
size_t T, N;
ifstream in("stdin");
if (in.fail()) return -1;
in >> T;
while (T--) {
in >> N;
Matrix A(N, 'A'), B(N, 'B');
in >> A >> B;
flag = A == B;
for (int i = 0; i < 3; ++i) {
A.rotate();
if (A == B) flag = true;
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
in.close();
return 0;
}[此贴子已经被作者于2016-11-17 14:45编辑过]

2016-11-17 14:40