• 枚举状态POJ1753Flip Game(枚举)


    在写这篇文章之前,xxx已经写过了几篇关于改枚举状态主题的文章,想要了解的朋友可以去翻一下之前的文章

        http://poj.org/problem?id=1753

        简略枚举。

        每一个格子只有翻与不翻两种状态(翻两次跟没翻一样)。总共16个格子,最多只能翻出2^16种状态。

        Code:

        每日一道理
    青春,有嬉笑声与哭泣声夹杂的年华,青春的少年是蓝天中翱翔的幼鹰,虽然没有完全长大,有些稚气,有些懵懂,脱不开父母的双手却极力想去找寻属于自己的一片天空,为的是一时的激情,为的是一种独自翱翔的感觉!
    #include <stdio.h>
    
    bool s[20][20];
    int best;
    
    int check()
    {
        int i, j, tot = 0;
        for(i=0;i<4;i++) for(j=0;j<4;j++) tot +=s[i][j];
        if(tot == 0 || tot == 16) return 1;
        return 0;
    }
    void Echange(int x, int y)
    {
        s[x][y] = !s[x][y];
        s[x+1][y] = !s[x+1][y];
        s[x][y+1] = !s[x][y+1];
        if(x>0) s[x-1][y] = !s[x-1][y];
        if(y>0) s[x][y-1] = !s[x][y-1];
    
    }
    void Search(int k, int ans)
    {
        int x, y;
        if(16 == k) {
            if( check()&& ans <best) best = ans;
        }else {
            x = k /4;
            y = k %4;
            Search(k+1,ans);//不翻
            Echange(x, y);
            Search(k+1,ans+1);//翻
            Echange(x, y);
        }
    }
    void work()
    {
        int i, j;
        char c;
        for(i = 0; i<4; i++)
        {
            for(j = 0; j<4; j++){
                scanf("%c", &c);
                if(c=='w') s[i][j] = 0;
                else s[i][j] = 1;
            }
            getchar();
        }
        //for(i=0;i<4;i++){for(j=0;j<4;j++) printf("%d",s[i][j]);printf("\n");}
        best = 1000;
        Search(0, 0);
        for(i=0;i<4;i++)
        for(j=0;j<4;j++)
           s[i][j] =!s[i][j];
        Search(0, 0);
        if(best != 1000) printf("%d\n",best);
        else printf("Impossible\n");
    }
    
    int main()
    {
        work();
        return 0;
    }

        参考链接:

        http://blog.csdn.net/lyy289065406/article/details/6642595

    文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
    “如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
    “如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
      最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

    --------------------------------- 原创文章 By
    枚举和状态
    ---------------------------------

  • 相关阅读:
    H265播放器EasyPlayer-RTSP WIN版播放器D3D和GDI两种渲染模式效果比较
    笛卡尔树复习笔记
    康托の复习笔记
    django rest unique 和UniqueTogether 检验
    代码扫描tool sonar
    await async axios
    httprunner 实现文件上传
    vue 实现xmind 脑图 web 创建脑图何修改删除
    jsmind
    【CF1548E】Gregor and the Two Painters
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3102370.html
Copyright © 2020-2023  润新知