• <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棋盤,棋子可以在棋盤上前后左右挪一格或者跳一格(如果相鄰格子有棋子的話),問初始狀態(tài)在8步內(nèi)能否達(dá)到給定的終止?fàn)顟B(tài)。
            下限函數(shù)仍然選擇不在位置上的棋子個(gè)數(shù),然后減枝即可。。
            話說POJ卡常數(shù),覺得復(fù)雜度應(yīng)該可以了,就是TLE,然后到TOJ上嘗試提交了下,1A,然后只好回來優(yōu)化常數(shù),把判重?fù)Q成數(shù)組判重,以6S的時(shí)間過了。。哎,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 閱讀(199) 評(píng)論(0)  編輯 收藏 引用 所屬分類: search

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計(jì)

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            中文成人久久久久影院免费观看| 久久96国产精品久久久| 国产叼嘿久久精品久久| 久久午夜无码鲁丝片| 日产精品久久久久久久| 亚洲人成无码网站久久99热国产 | 国产综合久久久久| 亚洲精品美女久久777777| 一本久道久久综合狠狠躁AV| 久久天天躁狠狠躁夜夜不卡| 九九久久精品国产| 国产高潮久久免费观看| 伊人久久免费视频| 久久播电影网| 深夜久久AAAAA级毛片免费看| 免费一级欧美大片久久网| 久久久久99这里有精品10 | 久久久久久噜噜精品免费直播| 99久久夜色精品国产网站| 九九久久精品无码专区| 青青草原综合久久大伊人导航 | 久久综合九色综合网站| 久久99精品国产麻豆| 亚洲va久久久噜噜噜久久天堂| 久久精品国产第一区二区三区| 国产成人久久AV免费| 亚洲一本综合久久| 久久久久无码中| 欧美日韩中文字幕久久久不卡| 亚洲Av无码国产情品久久| 四虎国产精品成人免费久久| 久久丫精品国产亚洲av| 国产精品美女久久久免费| 免费一级欧美大片久久网 | 日本道色综合久久影院| 久久久久久噜噜精品免费直播| 精品国产日韩久久亚洲| 精品国产乱码久久久久久1区2区| 成人国内精品久久久久影院VR| 亚洲欧美另类日本久久国产真实乱对白| 老男人久久青草av高清|