zoukankan      html  css  js  c++  java
  • 【搜索】Fliptile

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h> 
    
    const int maxn=20;  
    const int inf=210000;  
    typedef long long ll;  
    int m,n;  
    int opt[maxn][maxn];  
    int a[maxn][maxn];  
    int tmp[maxn][maxn];  
    int dx[]= {0,0,1,-1,0};  
    int dy[]= {-1,1,0,0,0};  
    int getcolor(int x,int y)  
    {  
        int ans=a[x][y];  
        for(int i=0; i<5; i++)  
        {  
            int xx=x+dx[i];  
            int yy=y+dy[i];  
            if(xx>=0&&xx<m&&yy>=0&&yy<n)  
                ans+=tmp[xx][yy];  
        }  
        return ans%2;  
    }  
      
    int cal()  
    {  
        int i,j;  
        for(i=1; i<m; i++)  
            for(j=0; j<n; j++)  
                if(getcolor(i-1,j))  
                    tmp[i][j]=1;  
      
        for(i=0;i<n;i++)  
            if(getcolor(m-1,i))return -1;  
      
        int ans=0;  
        for(i=0;i<m;i++)  
            for(j=0;j<n;j++)  
            ans+=tmp[i][j];  
        return ans;  
    }  
      
    void solve()  
    {  
        int rec=-1;  
        int i,j;  
        for(i=0;i<1<<n;i++)  
        {  
            memset(tmp,0,sizeof(tmp));  
            for(j=0;j<n;j++)  
            {  
                tmp[0][n-j-1]=i>>j&1;  
            }  
            int num=cal();  
            if(num>=0&&(rec>num||rec<0))  
            {  
                rec=num;  
                memcpy(opt,tmp,sizeof(tmp));  
            }  
        }  
        if(rec<0)  
            printf("IMPOSSIBLE
    ");  
        else  
        {  
            for(i=0;i<m;i++)  
            {  
                for(j=0;j<n;j++)  
                printf("%d%c",opt[i][j],j==n?'
    ':' ');  
                printf("
    ");  
            }  
      
        }  
    }  
      
      
    int main()  
    {  
        int  i,j,t,k;  
        while(~scanf("%d%d",&m,&n))  
        {  
            for(i=0; i<m; i++)  
                for(j=0; j<n; j++)  
                    scanf("%c",&a[i][j]); 
            solve();  
        }  
        return 0;  
    }  
  • 相关阅读:
    233
    膝为筋之府
    AES 可逆性加密算法
    DES 可逆性加密算法
    Java Swing如何让窗体居中显示
    eclipse 安装插件
    eclipse 搭建Swt 环境
    Java Set元素比较
    Greenplum数据库中系统表gp_ distribution_ policy详解
    Greenplum数据库中系统表pg_class详解
  • 原文地址:https://www.cnblogs.com/KID-XiaoYuan/p/6392125.html
Copyright © 2011-2022 走看看