一个矩形,如果四个角都标上数字,要得通过旋转,翻转等操作后的所有结果,只需要连续做对称翻转和上下翻转就可以了。
如题目:
http://hihocoder.com/problemset/problem/1268
#include <cstdio>
#include <algorithm>
#include <cstring>
#define rep(i, s, e) for (int i= s; i< e; i++)
int G[4][4];
int org[3][3] = {4, 9, 2, 3,5,7,8,1,6};
int a[9][3][3];
int main()
{
//freopen("in.txt", "r", stdin);
rep(i, 0, 3) rep(j, 0, 3) a[0][i][j] = org[i][j];
rep(i, 1, 8)
{
if (i%2){
rep(j, 0, 3)
rep(k, 0, 3)
a[i][j][k] = a[i-1][k][j];
}
else{
rep(j, 0, 3)
rep(k, 0, 3)
a[i][j][k] = a[i-1][j][2-k];
}
}
rep(i, 0, 3)
rep(j, 0, 3)
{
scanf("%d", &G[i][j]);
}
int ans = -1;
int ansNum = 0;
rep(i, 0, 8)
{
bool flag = true;
rep(j, 0, 3) rep(k, 0, 3)
{
if (G[j][k] != 0 && G[j][k] != a[i][j][k])
flag = false;
}
if (flag)
{
ansNum++;
ans = i;
}
}
if (ansNum > 1)
printf("Too Many\n");
else{
rep(i, 0, 3)
{
rep(j, 0, 3)
printf("%d ", a[ans][i][j]);
printf("\n");
}
}
}