#include<iostream>
using namespace std;
const int N = 4; //N阶大矩阵
const int M =3; //M阶小矩阵
int a[N][N] = //卡牌原始状态
{
0, 0 ,0, 1,
1, 1, 1, 1,
1, 1, 1, 1,
0, 0, 0, 1,
};
int flag = 0;//当前卡牌已经反转几次
const int counts = (N - M + 1)*(N - M + 1); //M阶矩阵个数
int mmkk[counts] = { 0 }; //m阶矩阵标识是否反转
int result[N][N] = { 0 }; //标识每一个数反转几次
int resultcount = 0;
int endflag = 0;
//判断是否所有数都已成正面
bool isend()
{
memset(result, 0, sizeof(result));
for (int i = 0; i < counts; i++)
{
if (mmkk[i] > 0) {
for (int j = 0; j < M; j++)
{
for (int k = 0; k < M; k++)
{
int x = i / (N - M + 1) +j;
int y = i % (N - M + 1) + k;
if (x >= 0 && x < N && y >= 0 && y < N)
{
result[x][y] += 1;
}
}
}
}