• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Ural 1060 Flip Game

            C++ Accepted
            0.031 197 KB


            1060. Flip Game

            Time Limit: 2.0 second
            Memory Limit: 16 MB
            Flip game is played on a rectangular 4×4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is lying either it's black or white side up. Each round you flip 3 to 5 pieces, thus changing the color of their upper side from black to white and vice versa. The pieces to be flipped are chosen every round according to the following rules:
            1. Choose any one of the 16 pieces.
            2. Flip the chosen piece and also all adjacent pieces to the left, to the right, to the top, and to the bottom of the chosen piece (if there are any).
            Problem illustration
            Consider the following position as an example:
            bwbw
                        wwww
                        bbwb
                        bwwb
                        
            Here "b" denotes pieces lying their black side up and "w" denotes pieces lying their white side up. If we choose to flip the 1st piece from the 3rd row (this choice is shown at the picture), then the field will become:
            bwbw
                        bwww
                        wwwb
                        wwwb
                        
            The goal of the game is to flip either all pieces white side up or all pieces black side up. You are to write a program that will search for the minimum number of rounds needed to achieve this goal.

            Input

            The input consists of 4 lines with 4 characters "w" or "b" each that denote game field position.

            Output

            Write to the output a single integer number — the minimum number of rounds needed to achieve the goal of the game from the given position. If the goal is initially achieved, then write 0. If it's impossible to achieve the goal, then write the word "Impossible" (without quotes).

            Sample

            input output
            bwbw
                        wwww
                        bbwb
                        bwwb
                        
            Impossible
                        
            Problem Source: 2000-2001 ACM Northeastern European Regional Programming Contest

            wa了幾次
            原因:1是cnt只增沒減
                         2是search的推出條件寫成if(m==16){ ……},這種情況下對(duì)于只改變最后一個(gè)即可得情況沒有判定。改成m>16

            #include<iostream>
            using namespace std;
            bool status[6][6]={0};
            const int MAX=0x7fffffff;
            int cnt=0,cntMin=MAX;        

            bool check()
            {
                
            bool f=status[1][1];
                
            int i,j;
                
            for(i=1; i<=4; i++)
                
            for(j=1; j<=4; j++)
                   
            if(f!=status[i][j])return false;
                
                
            return true;
            }

            void turn(int i, int j)
            {
                 status[i][j]
            =!status[i][j];
                 status[i
            -1][j]=!status[i-1][j];
                 status[i
            +1][j]=!status[i+1][j];
                 status[i][j
            -1]=!status[i][j-1];
                 status[i][j
            +1]=!status[i][j+1];
            }

            void input()
            {
                 
            char ch;
                 
            for(int i=1; i<=4; i++)
                 
            for(int j=1; j<=4; j++)
                 {
                         cin
            >>ch;
                         status[i][j]
            =(ch=='b' ? 0 : 1 );
                 }


            void search(int m)
            {
                    
            if(m>16){
                             
            if( check() && (cnt<cntMin) )cntMin=cnt;     
                             
            return ;
                    }
                    
            int i=(m+3)/4
                    
            int j=m-4*(i-1);
                    
                    turn(i,j); cnt
            ++;
                    search(m
            +1);
                    
                    turn(i,j);cnt
            --;
                    search(m
            +1);   
            }

            int main()
            {
                input();   
                search(
            1);
                
            if(cntMin==MAX)cout<<"Impossible"<<endl;
                
            else cout<<cntMin<<endl;
                system(
            "pause");
                
            return 0;
            }

            posted on 2010-07-31 21:44 田兵 閱讀(310) 評(píng)論(0)  編輯 收藏 引用 所屬分類: URAL

            <2010年7月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(2)

            隨筆分類(65)

            隨筆檔案(65)

            文章檔案(2)

            ACM

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            国内精品久久久久影院网站| 91久久精品无码一区二区毛片| 久久996热精品xxxx| 日韩电影久久久被窝网| 久久精品一本到99热免费| av无码久久久久不卡免费网站| 久久免费线看线看| 久久综合视频网站| 久久国产亚洲精品无码| 久久九九免费高清视频| 久久国产亚洲精品无码| 欧美精品一区二区久久| 国产精品禁18久久久夂久| 亚洲欧洲精品成人久久奇米网| 国内精品久久久久影院优| 色青青草原桃花久久综合| 国产香蕉97碰碰久久人人| 久久国产高潮流白浆免费观看| 亚洲国产成人精品女人久久久 | 奇米影视7777久久精品人人爽| 国产亚洲色婷婷久久99精品| 2021最新久久久视精品爱| 国産精品久久久久久久| 国产精品美女久久久久久2018| 久久久久久久波多野结衣高潮 | 国产午夜精品理论片久久| 国产综合久久久久久鬼色| 无码国产69精品久久久久网站| 三级韩国一区久久二区综合 | 狠狠色婷婷久久一区二区三区| 亚洲国产精品无码久久久久久曰| 久久精品中文字幕久久| 国产欧美久久久精品| 久久精品国产99久久久| 91精品国产高清91久久久久久| 色妞色综合久久夜夜| 久久er99热精品一区二区| 国产精品一区二区久久不卡| 国产成人精品白浆久久69| 久久最近最新中文字幕大全| 久久国产亚洲精品麻豆|