• <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)常在家玩。。),一個8*8棋盤,棋子可以在棋盤上前后左右挪一格或者跳一格(如果相鄰格子有棋子的話),問初始狀態(tài)在8步內(nèi)能否達到給定的終止狀態(tài)。
            下限函數(shù)仍然選擇不在位置上的棋子個數(shù),然后減枝即可。。
            話說POJ卡常數(shù),覺得復雜度應(yīng)該可以了,就是TLE,然后到TOJ上嘗試提交了下,1A,然后只好回來優(yōu)化常數(shù),把判重換成數(shù)組判重,以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

            導航

            統(tǒng)計

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久涩综合| 久久99久久99小草精品免视看| 91久久精品国产91性色也| 嫩草影院久久99| 久久久久久久亚洲精品| 久久久久亚洲AV无码专区首JN| 少妇熟女久久综合网色欲| 久久综合给久久狠狠97色| 色综合久久88色综合天天| 色婷婷综合久久久久中文字幕| 人妻无码αv中文字幕久久 | 热综合一本伊人久久精品| 久久人人爽人人爽人人片av麻烦| 久久久久无码精品国产不卡| 久久久久久国产精品免费免费| 亚洲精品乱码久久久久久久久久久久 | 国产精品九九久久精品女同亚洲欧美日韩综合区 | 亚洲欧洲久久av| 久久九九亚洲精品| 久久精品国产99国产精品导航| 国内精品久久久久久久影视麻豆| 亚洲精品美女久久777777| 亚洲午夜久久久| 国产精品久久久久一区二区三区| 久久亚洲AV成人出白浆无码国产| 四虎国产精品成人免费久久| 国产欧美久久一区二区| 久久强奷乱码老熟女网站| 久久最新免费视频| 久久黄色视频| 久久精品无码一区二区app| 99精品国产在热久久无毒不卡| 麻豆av久久av盛宴av| 国产精品中文久久久久久久| 亚洲国产成人精品女人久久久| 99久久久久| 久久99久久成人免费播放| 久久成人精品| 久久久艹| 久久久久波多野结衣高潮| 久久这里只有精品首页|