Fliptile POJ -状压枚举第一层

  • Fliptile

  •  POJ - 3279 
  • 题意:
  • 牛可以踩格子保证求一个最少踩的次数,最小状态下输出每个位置踩的次数
  • 思路:
  • 枚举第一层的状态依次就可以确定下面的状态。
  • 注意递归回溯图修改恢复的处理。
  • #include 
    #include
    #include
    #include
    using namespace std;
    #define maxn 22
    #define inf 0x3f3f3f3f
    #define ll long long
    ll t,n,m,ans,sum=inf;
    char gra[maxn][maxn],mmp[maxn][maxn],out[maxn][maxn],in[maxn][maxn],pr[maxn][maxn];
    void check(int s)
    {
        memcpy(pr,out,sizeof(out));
        for(int i=1; i0)
                        mmp[i][j-1]=='1'?mmp[i][j-1]='0':mmp[i][j-1]='1';
                    if(jm)
            return;
        if(cnt==m)
        {
            memcpy(gra,mmp,sizeof(mmp));
            check(s);
            memcpy(mmp,gra,sizeof(mmp));
            return ;
        }
        out[0][cnt]='0';
        dfs(cnt+1,s);
        out[0][cnt]='1';
        if(mmp[0][cnt]=='1')
        {
            mmp[0][cnt]='0';
            if(cnt>0)
                mmp[0][cnt-1]=='1'?mmp[0][cnt-1]='0':mmp[0][cnt-1]='1';
            if(cnt0)
                mmp[0][cnt-1]=='1'?mmp[0][cnt-1]='0':mmp[0][cnt-1]='1';
            if(cnt0)
                mmp[0][cnt-1]=='1'?mmp[0][cnt-1]='0':mmp[0][cnt-1]='1';
            if(cnt0)
                mmp[0][cnt-1]=='1'?mmp[0][cnt-1]='0':mmp[0][cnt-1]='1';
            if(cnt

     

你可能感兴趣的:(搜索进阶)