简单的枚举,一开始看了一下觉得和以前的魔板差不多,果断开始广搜,结果发现每个操作仅能一次,审题啊。。
1-5之间有联系,转4个90度就相当于转回来。。
/*
ID: zhangw31
PROG: transform
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;
const int MAXN = 11;
int N, ans;
char pattern[MAXN][MAXN];
char target[MAXN][MAXN];
char change[MAXN][MAXN];
void clockwiserot() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
change[j][N-i-1] = pattern[i][j];
}
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
pattern[i][j] = change[i][j];
}
}
}
void refle() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
change[i][N-j-1] = pattern[i][j];
}
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
pattern[i][j] = change[i][j];
}
}
}
bool checkOK() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (pattern[i][j] != target[i][j]) {
return false;
}
}
}
return true;
}
void testRotate(int a) {
if (checkOK() && a < ans) ans = a;
}
int main() {
ifstream fin("transform.in");
ofstream fout("transform.out");
fin >> N;
for (int i = 0; i < N; ++i) fin >> pattern[i];
for (int i = 0; i < N; ++i) fin >> target[i];
ans = 7;
testRotate(6);
for (int i = 1; i <= 3; ++i) {
clockwiserot();
testRotate(i);
}
clockwiserot();
refle();
testRotate(4);
for (int i = 0; i < 3; ++i) {
clockwiserot();
testRotate(5);
}
fout << ans << endl;
}