POJ-3279 Fliptile
作者:互联网
D - Fliptile (POJ - 3279)
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int N = 15+5;
int b[N][N] = {{0}}, c[N][N] = {{0}}, a[N][N] = {{0}};
int n, m, ans = inf;
int dx[]= { 1, -1, 0, 0, 0};
int dy[]= { 0, 0, 1, -1, 0};
int isb(int x, int y) {
int t = b[x][y];
for(int i=0; i<5; i++) {
int xi = x+dx[i];
int yi = y+dy[i];
if(xi<0 || xi>=n || yi<0 || yi>=m) {
continue;
}
t += c[xi][yi];
}
return t%2;
}
int dfs() {
for(int i=1; i<n; i++)
for(int j=0; j<m; j++)
if(isb(i-1,j))
c[i][j] = 1;
for(int i=0; i<m; i++)
if(isb(n-1,i))
return -1;
int res=0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
res += c[i][j];
return res;
}
int main(void) {
while(scanf("%d%d", &n, &m)==2) {
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
scanf("%d", &b[i][j]);
}
}
for(int i=0; i<(1<<m); i++) {
memset(c, 0, sizeof(c));
for(int j=0; j<m; j++) {
c[0][m-j-1] = i>>j&1;
}
int res = dfs();
if(res>=0 && res<ans) {
ans = res;
memcpy(a, c, sizeof(c));
}
}
if(ans==inf) {
printf("IMPOSSIBLE\n");
} else {
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
}
return 0;
}
标签:const,int,res,Fliptile,dfs,POJ,inf,3279 来源: https://blog.csdn.net/IT1656409967/article/details/96964083