其他分享
首页 > 其他分享> > POJ-3279 Fliptile

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