• <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 1198 Solitaire 搜索+剪枝

            題意:
                  應(yīng)該是跳棋游戲(我奶奶經(jīng)常在家玩。。),一個(gè)8*8棋盤(pán),棋子可以在棋盤(pán)上前后左右挪一格或者跳一格(如果相鄰格子有棋子的話(huà)),問(wèn)初始狀態(tài)在8步內(nèi)能否達(dá)到給定的終止?fàn)顟B(tài)。
            下限函數(shù)仍然選擇不在位置上的棋子個(gè)數(shù),然后減枝即可。。
            話(huà)說(shuō)POJ卡常數(shù),覺(jué)得復(fù)雜度應(yīng)該可以了,就是TLE,然后到TOJ上嘗試提交了下,1A,然后只好回來(lái)優(yōu)化常數(shù),把判重?fù)Q成數(shù)組判重,以6S的時(shí)間過(guò)了。。哎,JAVA就是可憐啊。。
              1 import java.util.*;
              2 import java.io.*;
              3 public class Main {
              4 
              5     /**
              6      * @param args
              7      */
              8     static point p1[]=new point[4],p2[]=new point[4];
              9     static boolean map[][]=new boolean[10][10];
             10     static boolean map1[][]=new boolean[10][10];
             11     static class point
             12     {
             13         int r,c;
             14         public point(int rr,int cc)
             15         {
             16             r=rr;
             17             c=cc;
             18         }
             19         public boolean equals(point pos)
             20         {
             21             return r==pos.r&&c==pos.c;
             22         }
             23     }
             24     static final boolean isnotin(int r,int c,point p[])
             25     {
             26         for(int i=0;i<4;i++)
             27             if(p[i].r==r&&p[i].c==c)
             28                 return false;
             29         return true;
             30     }
             31     static boolean dfs(point p[],int diff,int layer)
             32     {
             33         if(layer+diff>8return false;
             34         else if(diff==0
             35         {
             36             return true;
             37         
             38         }
             39         else
             40         {
             41             for(int i=0;i<4;i++)
             42             {
             43                 if(p[i].r+1<8&&isnotin(p[i].r+1,p[i].c,p))
             44                 {
             45                     p[i].r++;
             46                     if(dfs(p,diff+(isnotin(p[i].r-1,p[i].c,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
             47                         {
             48                     
             49                             return true;
             50                         }
             51                     p[i].r--;
             52                 }
             53                 if(p[i].c+1<8&&isnotin(p[i].r,p[i].c+1,p))
             54                 {
             55                     p[i].c++;
             56                     if(dfs(p,diff+(isnotin(p[i].r,p[i].c-1,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
             57                     {
             58                     
             59                         return true;
             60                     }
             61                     p[i].c--;
             62                 }
             63                 if(p[i].c-1>=0&&isnotin(p[i].r,p[i].c-1,p))
             64                 {
             65                     p[i].c--;
             66                     if(dfs(p,diff+(isnotin(p[i].r,p[i].c+1,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
             67                     {
             68                         
             69                         return true;
             70                     }
             71                     p[i].c++;
             72                 }
             73                 if(p[i].r-1>=0&&isnotin(p[i].r-1,p[i].c,p))
             74                 {
             75                     p[i].r--;
             76                     if(dfs(p,diff+(isnotin(p[i].r+1,p[i].c,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
             77                     {
             78                         
             79                         return true;
             80                     }
             81                     p[i].r++;
             82                 }
             83                 
             84                 if(p[i].r+2<8&&isnotin(p[i].r+2,p[i].c,p)&&!isnotin(p[i].r+1,p[i].c,p))
             85                 {
             86                     p[i].r+=2;
             87                     if(dfs(p,diff+(isnotin(p[i].r-2,p[i].c,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1))
             88                     {
             89                         
             90                         return true;
             91                     }
             92                     p[i].r-=2;
             93                     
             94                 }
             95                 if(p[i].c+2<8&&isnotin(p[i].r,p[i].c+2,p)&&!isnotin(p[i].r,p[i].c+1,p))
             96                 {
             97                     p[i].c+=2;
             98                     if(dfs(p,diff+(isnotin(p[i].r,p[i].c-2,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
             99                     {
            100                         
            101                         return true;
            102                     }
            103                     p[i].c-=2;
            104                 }
            105                 if(p[i].c-2>=0&&isnotin(p[i].r,p[i].c-2,p)&&!isnotin(p[i].r,p[i].c-1,p))
            106                 {
            107                     p[i].c-=2;
            108                     if(dfs(p,diff+(isnotin(p[i].r,p[i].c+2,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
            109                     {
            110                         
            111                         return true;
            112                     }
            113                     p[i].c+=2;
            114                 }
            115                 if(p[i].r-2>=0&&isnotin(p[i].r-2,p[i].c,p)&&!isnotin(p[i].r-1,p[i].c,p))
            116                 {
            117                     p[i].r-=2;
            118                     if(dfs(p,diff+(isnotin(p[i].r+2,p[i].c,p2)?0:1)-(map[p[i].r][p[i].c]?1:0),layer+1)) 
            119                     {
            120                         
            121                         return true;
            122                     }
            123                     p[i].r+=2;
            124                 }
            125                 
            126                 
            127             }
            128             return false;
            129         }
            130     }
            131     public static void main(String[] args) throws IOException{
            132         Scanner in=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
            133         for(int i=0;i<4;i++)
            134            p1[i]=new point(in.nextInt()-1,in.nextInt()-1);
            135         for(int i=0;i<4;i++)
            136            p2[i]=new point(in.nextInt()-1,in.nextInt()-1);
            137         for(int i=0;i<8;i++)
            138         {
            139             Arrays.fill(map[i], false);
            140             Arrays.fill(map1[i],false);
            141         }
            142         for(int i=0;i<4;i++)
            143         {
            144             map[p2[i].r][p2[i].c]=true;
            145             map1[p1[i].r][p1[i].c]=true;
            146         }
            147         int diff=0;
            148         for(int i=0;i<4;i++)
            149         {
            150             boolean flag=false;
            151             for(int j=0;j<4&&!flag;j++)
            152                 if(p1[i].equals(p2[j]))
            153                     flag=true;
            154             if(!flag) diff++;
            155         }
            156         if(dfs(p1,diff,0)) System.out.println("YES");
            157         else System.out.println("NO");
            158 
            159     }
            160 
            161 }
            162 


            posted on 2010-10-16 01:50 yzhw 閱讀(213) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): search

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            統(tǒng)計(jì)系統(tǒng)

            留言簿(1)

            隨筆分類(lèi)(227)

            文章分類(lèi)(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            亚洲人成精品久久久久| 99久久国产主播综合精品| 久久国产精品偷99| 伊人色综合久久天天人手人婷 | 精品国产青草久久久久福利| 99久久精品午夜一区二区| 国产精品无码久久四虎| 无码人妻少妇久久中文字幕蜜桃| 亚洲精品国精品久久99热一| 狠狠色丁香婷婷综合久久来来去| 久久久久亚洲精品日久生情| 99久久精品免费看国产免费| 亚洲熟妇无码另类久久久| 久久久久国产亚洲AV麻豆| av午夜福利一片免费看久久| 亚洲精品tv久久久久| 狠狠色噜噜狠狠狠狠狠色综合久久| 中文字幕精品久久久久人妻| 97久久久久人妻精品专区| AV无码久久久久不卡网站下载| 四虎影视久久久免费观看| 久久天天躁狠狠躁夜夜2020一| 国产叼嘿久久精品久久| 99国产欧美精品久久久蜜芽| 久久综合精品国产二区无码| 久久精品a亚洲国产v高清不卡| 色欲久久久天天天综合网精品| 久久亚洲2019中文字幕| 一级做a爰片久久毛片看看| 青青草国产精品久久久久| 亚洲一本综合久久| 久久亚洲精品中文字幕三区| 亚洲乱亚洲乱淫久久| 久久精品国产精品青草| 免费精品99久久国产综合精品| 久久偷看各类wc女厕嘘嘘| 久久久久99精品成人片欧美| 久久婷婷五月综合97色| 国产精品免费福利久久| 狠狠色婷婷综合天天久久丁香| 久久久久夜夜夜精品国产|