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

            題意:
                  應該是跳棋游戲(我奶奶經常在家玩。。),一個8*8棋盤,棋子可以在棋盤上前后左右挪一格或者跳一格(如果相鄰格子有棋子的話),問初始狀態在8步內能否達到給定的終止狀態。
            下限函數仍然選擇不在位置上的棋子個數,然后減枝即可。。
            話說POJ卡常數,覺得復雜度應該可以了,就是TLE,然后到TOJ上嘗試提交了下,1A,然后只好回來優化常數,把判重換成數組判重,以6S的時間過了。。哎,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 閱讀(206) 評論(0)  編輯 收藏 引用 所屬分類: search

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

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲国产婷婷香蕉久久久久久| 久久夜色精品国产噜噜噜亚洲AV | 伊人情人综合成人久久网小说| 国产福利电影一区二区三区,免费久久久久久久精 | 国产综合成人久久大片91| 国产巨作麻豆欧美亚洲综合久久 | 久久中文精品无码中文字幕| 亚洲欧洲精品成人久久曰影片| 精品久久久久久中文字幕大豆网| 久久久久亚洲AV无码网站| 久久久九九有精品国产| 日本久久久久久久久久| 国内精品综合久久久40p| 久久精品国产秦先生| 久久综合成人网| 国产精品久久久天天影视| 亚洲欧美成人久久综合中文网 | 亚洲а∨天堂久久精品| 久久精品国产影库免费看 | 久久天天躁狠狠躁夜夜avapp| 国产精品久久久久影视不卡| 亚洲国产成人精品女人久久久 | 久久精品国产亚洲AV影院| 国产欧美一区二区久久| 久久综合久久综合亚洲| 国产美女久久精品香蕉69| 色偷偷88欧美精品久久久| 国产精品免费看久久久香蕉| 精品国产VA久久久久久久冰| 久久久久人妻一区二区三区| 久久国产成人精品国产成人亚洲| 国内精品人妻无码久久久影院| 无码国内精品久久综合88| 久久精品无码免费不卡| 秋霞久久国产精品电影院| 久久精品人成免费| 久久A级毛片免费观看| 久久久久高潮毛片免费全部播放| 亚洲精品乱码久久久久久中文字幕| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 伊人久久大香线蕉综合影院首页|