#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int MAX_LEN = 15;
int n, m, ans, cnt;
bool Squ[MAX_LEN + 2][MAX_LEN + 2], Fliped[MAX_LEN][MAX_LEN], solved;
inline void Flip(int i, int j) {
Squ[i][j] = !Squ[i][j];
Squ[i + 1][j] = !Squ[i + 1][j];
Squ[i - 1][j] = !Squ[i - 1][j];
Squ[i][j + 1] = !Squ[i][j + 1];
Squ[i][j - 1] = !Squ[i][j - 1];
return;
}
inline int Min(int a, int b) {
return a < b ? a : b;
}
void Check(int k) {
int tmp = k;
memset(Fliped, false, sizeof(Fliped));
int cnt1 = 0;
for (int j = 1; j <= m; j++, k >>= 1) {
if (k & 1) {
Fliped[1][m - j + 1] = true;
Flip(1, m - j + 1);
cnt1++;
}
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (Squ[i - 1][j]) {
Fliped[i][j] = true;
Flip(i, j);
cnt1++;
}
}
}
bool flag = true;
for (int j = 1; j <= m; j++) {
if (Squ[n][j]) {
flag = false;
}
}
if (flag && cnt1 < cnt) {
ans = tmp, cnt = cnt1, solved = true;
//cout << cnt1 << endl;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (Fliped[i][j]) {
Flip(i, j);
Fliped[i][j] = false;
}
}
}
return;
}
void Output(int k) {
for (int j = 1; j <= m; j++, k >>= 1) {
if (k & 1) {
Fliped[1][m - j + 1] = true;
Flip(1, m - j + 1);
}
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (Squ[i - 1][j]) {
Fliped[i][j] = true;
Flip(i, j);
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << Fliped[i][j];
if (j < m) {
cout << ' ';
}
}
if (i < n) {
cout << endl;
}
}
return;
}
int main() {
solved = false;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> Squ[i][j];
}
}
cnt = n * m + 1;
for (int k = 0; k < (1 << m); k++) {
Check(k);
}
if (cnt < n * m + 1) {
Output(ans);
}
else {
cout << "IMPOSSIBLE" << endl;
}
return 0;
}
求DALAO帮帮忙看看我这代码哪里错了啊