• <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>
            #include <iostream>
            #include 
            <queue>

            using namespace std;

            bool  g[4][4];
            int   binary[16]= 124816326412825651210242048409681921638432768 };
            bool  visited[65538];

            int change( bool gg[4][4] )
            {
             
            int num= 0;
             
            int t= 15;
             
             
            for ( int i= 0; i< 4++i )
                
            for ( int j= 0; j< 4++j )
                 
            {
               
            if ( gg[i][j] ) num+= binary[t];
               
               t
            --;
              }

              
             
            return num;  
            }


            void recover( int data, bool temp[4][4] )
            {
             
            int  re[16];
             
            int  t= 15;
             
             memset( re, 
            0sizeof(re) );
             
            while ( data!= 0 )
             
            {
              re[t]
            = ( data% 2 );
              
              data
            /= 2;
              t
            -- ;
             }

             t
            = 0;

             
            for ( int i= 0; i< 4++i )
                 
            for ( int j= 0; j< 4++j )
                 
            {
               temp[i][j]
            = ( re[t]== 1 );
               t
            ++;
              }
             
            }


            struct Node
            {
             
            int value;
             
            int steps;
             
             Node()
             
            {}
             
             Node( 
            int a, int b )
             :value(a), steps(b)
             
            {}
            }
            ;

            void copy( bool b1[4][4], bool b2[4][4] )
            {
             
            for ( int i= 0; i< 4++i )
               
            for ( int j= 0; j< 4++j )
                 b2[i][j]
            = b1[i][j];
            }


            void print( bool b[4][4] )
            {
             
            for ( int i= 0; i< 4++i )
             
            {
              
            for ( int j= 0; j< 4++j )
              cout 
            << b[i][j] << ' ';
              
              cout 
            << endl;
             }

            }


            int main()
            {
             
            for ( int i= 0; i< 4++i )
             
            {
                
            for ( int j= 0; j< 4++j )
                
            {
               
            char ch;
               scanf(
            "%c",&ch);
               
               g[i][j]
            = ( ch== 'b' );
              }

              
              getchar();
            }

             
             memset( visited, 
            falsesizeof(visited) ); 
             queue
            <Node> q;
             
             q.push( Node( change(g), 
            0 ) );
             visited[ change(g) ]
            = true;
             
            bool  ans= false;
             
             
            while ( !q.empty() )
             
            {
              
            bool  temp[4][4];
              Node  t
            = q.front();
              q.pop();
              
              
            if ( t.value== 0 || t.value== 65535 )
              
            {
               printf(
            "%d", t.steps );
               ans
            = true;
               
               
            break;
              }

              
              recover( t.value, temp );
              
              
            for ( int i= 0; i< 4++i )
                  
            for ( int j= 0; j< 4++j )
                  
            {
                
            bool  tt[4][4];
                copy( temp, tt );

                tt[i][j]
            = !tt[i][j];
                
            if ( i- 1>= 0 ) tt[i-1][j]= !tt[i-1][j];
                
            if ( i+ 1< 4 )  tt[i+1][j]= !tt[i+1][j];
                
            if ( j- 1>= 0 ) tt[i][j-1]= !tt[i][j-1];
                
            if ( j+ 1< 4 )  tt[i][j+1]= !tt[i][j+1];
                
                
            int   curr= change( tt );
                
                
            if ( !visited[curr] )
                
            {
                 q.push( Node( curr, t.steps
            + 1) );
                 visited[curr]
            = true;
                }

               }

             }

             
            if ( !ans ) printf("Impossible");

             
            return 0;
            }


            posted on 2008-11-06 12:40 Darren 閱讀(366) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99热热久久这里只有精品68| 国产精品禁18久久久夂久| 日本精品久久久久中文字幕| 成人国内精品久久久久影院| 伊人久久大香线焦综合四虎| 亚洲人成网站999久久久综合| 久久久久久综合网天天| 久久天天躁狠狠躁夜夜网站| 国产无套内射久久久国产| 久久国产色av免费看| 久久久久久久99精品免费观看| 久久无码人妻精品一区二区三区 | 亚洲精品乱码久久久久久| 亚洲午夜久久久影院| 久久本道久久综合伊人| 久久精品水蜜桃av综合天堂| 欧美亚洲另类久久综合婷婷| 91精品国产综合久久久久久| 久久天天婷婷五月俺也去| 精品久久久久国产免费 | 情人伊人久久综合亚洲| 久久综合亚洲色HEZYO国产| 久久综合欧美成人| 精品久久久久久久无码| 精品久久久久久久久免费影院| 久久99精品国产99久久6| 国内精品久久久久久99| 久久亚洲精品无码AV红樱桃| 狠狠色丁香婷婷久久综合五月| 久久国产影院| 九九久久精品国产| 久久精品中文字幕一区| 国产亚洲精午夜久久久久久| 国产高清美女一级a毛片久久w | 久久天天躁狠狠躁夜夜2020老熟妇| 99re这里只有精品热久久| 精品人妻久久久久久888| 蜜臀av性久久久久蜜臀aⅴ麻豆| 无码专区久久综合久中文字幕 | 亚洲精品国产成人99久久| 国产精品久久久久无码av|