• <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>

            PKU 1753枚舉

            這個(gè)跟暑假做的一個(gè)題目是類似的 不過就是多了一種可能 全黑或者全白都可以

            算法思路:
            1 第一行枚舉操作 下面的每行如果上行此列為黑(或者白)的時(shí)候進(jìn)行操作
            2 檢查最后一行是否滿足要求

            剪枝:
            如果操作次數(shù)已經(jīng)超過當(dāng)前最小次數(shù) 不必再試驗(yàn)

            代碼如下:

            /**********************
            Author: WHU_Victordu
            Created Time: 2007-12-26
            File Name: pku1753.cpp
              Description: 
               **************************/
            #include "stdio.h"
            #include "memory.h"
            #define  INF 32675
            int grid[4][4],a[4][4],out[4][4],op[4][4];
            char cgrid[4][4];

            void next()
            {
                  int j;
                 for(j=3;j>=0;j--)
                   {
                       if(j==3)    op[0][j]++;
                       else
                       if(op[0][j+1]==2)    {op[0][j+1]=0;op[0][j]++;}
                       else    break;
                 }
            }    

            void copy()
            {        
                 int i,j;        
                 for(i=0;i<4;i++)
                     for(j=0;j<4;j++)
                             a[i][j]=grid[i][j];
             }

            void change(int i,int j)
            {
                   a[i][j]^=1;
                  if(j>0)   a[i][j-1]^=1;
                  if(j<3) a[i][j+1]^=1;
                  if(i>0)   a[i-1][j]^=1;
                  if(i<3) a[i+1][j]^=1;
            }    
                      
            int main()
            {
                  int i,j,cnt,min=INF,flag;
                 
                  for(i=0;i<4;i++)
                  {
                   gets(cgrid[i]);
                  for(j=0;j<4;j++)
                  {
                  if(cgrid[i][j]=='w') grid[i][j]=0;
                  else grid[i][j]=1;
                  }
                  }
                  memset(op,0,sizeof(op));
                  while(op[0][0]!=2)
                  {
                        copy();
                        cnt=0;
                        flag=0;
                        for(i=0;i<=4;i++)
                        {
                             if(i!=0&&i!=4)
                             {
                                       for(j=0;j<4;j++)
                                      if(a[i-1][j]==1)            
                                      {
                                            op[i][j]=1;
                                            change(i,j);
                                            cnt++;
                                            if(cnt>min)    {flag=1;break;}
                                       }
                                       else    op[i][j]=0;
                              }                 
                              else
                              {
                                       if(i==0)     
                                     {
                                       for(j=0;j<4;j++)    
                                         if(op[i][j]==1)        
                                       {
                                                change(i,j);cnt++;
                                      }
                                    }
                                      else
                                      if(i==4)
                                     {
                                          for(j=0;j<4&&a[i-1][j]==0;j++);    
                                          if(j==4&&cnt<min)    {min=cnt;copy();}
                                      }
                                }
                                if(flag==1)    break;
                           }
                             next();
                    }
                   
                  memset(op,0,sizeof(op));
                  while(op[0][0]!=2)
                  {
                        copy();
                        cnt=0;
                        flag=0;
                        for(i=0;i<=4;i++)
                        {
                             if(i!=0&&i!=4)
                             {
                                       for(j=0;j<4;j++)
                                      if(a[i-1][j]==0)            
                                      {
                                            op[i][j]=1;
                                            change(i,j);
                                            cnt++;
                                            if(cnt>min)    {flag=1;break;}
                                       }
                                       else    op[i][j]=0;
                              }                 
                              else
                              {
                                       if(i==0)     
                                     {
                                       for(j=0;j<4;j++)    
                                         if(op[i][j]==1)        
                                       {
                                                change(i,j);cnt++;
                                      }
                                    }
                                      else
                                      if(i==4)
                                     {
                                          for(j=0;j<4&&a[i-1][j]==1;j++);    
                                          if(j==4&&cnt<min)    {min=cnt;copy();}
                                      }
                                }
                                if(flag==1)    break;
                           }
                             next();
                    }
                       if(min==INF)    printf("Impossible\n");
                       else
                       printf("%d\n",min);
                    // while(1);
                     return 0;
            }

             

            posted on 2007-12-26 10:35 Victordu 閱讀(1353) 評(píng)論(2)  編輯 收藏 引用

            評(píng)論

            # re: PKU 1753枚舉 2007-12-27 15:28 simbaforrest

            嗯,我是用二進(jìn)制作狀態(tài)枚舉的  回復(fù)  更多評(píng)論   

            # re: PKU 1753枚舉 2007-12-27 22:14 Victordu

            哈哈 simba@simbaforrest
              回復(fù)  更多評(píng)論   


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


            導(dǎo)航

            <2007年12月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            統(tǒng)計(jì)

            常用鏈接

            留言簿(5)

            隨筆檔案(46)

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            亚洲AV无码成人网站久久精品大| 人妻无码中文久久久久专区| 久久男人Av资源网站无码软件| 最新久久免费视频| 少妇被又大又粗又爽毛片久久黑人| 久久本道久久综合伊人| 国内精品久久久久久久久电影网| 国内精品伊人久久久久网站| 精品无码久久久久久久动漫| 久久成人国产精品一区二区| 久久久WWW成人免费毛片| 久久99精品久久久久久秒播| 狠狠精品干练久久久无码中文字幕| Xx性欧美肥妇精品久久久久久| 亚洲嫩草影院久久精品| 欧美精品福利视频一区二区三区久久久精品 | 国内精品综合久久久40p| 少妇久久久久久被弄高潮| 亚洲国产另类久久久精品| 久久人人妻人人爽人人爽| 亚洲国产精品久久久久婷婷老年| 99久久亚洲综合精品网站| 久久亚洲AV永久无码精品| 无码国内精品久久综合88 | 久久嫩草影院免费看夜色| 香蕉久久夜色精品国产2020| 新狼窝色AV性久久久久久| 999久久久国产精品| 久久WWW免费人成一看片| 欧美熟妇另类久久久久久不卡| 久久99热只有频精品8| 久久久久婷婷| 99久久国语露脸精品国产| 亚洲国产精品综合久久一线| 精品国产VA久久久久久久冰 | 久久涩综合| 97热久久免费频精品99| 亚洲欧美国产日韩综合久久| 国产精品美女久久久久网| 久久人人爽人人人人爽AV | 欧美久久综合性欧美|