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

            A Za, A Za, Fighting...

            堅信:勤能補拙

            PKU 1753 Flip Game

            問題:
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1753

            思路:
            首先,觀察題意,可以發(fā)現(xiàn)對于每個piece,最多只有兩種可能性: 翻轉(zhuǎn)一次或者不翻轉(zhuǎn),翻轉(zhuǎn)多次是沒有意義的
            另外,由于整個rectangular大小是4X4,因此可以使用位運算來提高性能

            對于位運算,需要知道的是如何反轉(zhuǎn)任意的某一位:
            巧妙的異或運算 1^x = ~x  0^x = x

            1. 深度優(yōu)先搜索
             1 #define SIZE 4
             2 #define BIT_MAX 16
             3 const int END_BLACK = 0;
             4 const int END_WHITE = (1<<(BIT_MAX))-1;
             5 int min;
             6 
             7 int
             8 flip(int init_state, int bit_num)
             9 {
            10     int x, y;
            11     x = bit_num / SIZE;
            12     y = bit_num % SIZE;
            13     init_state ^= (1<<bit_num);
            14     if(x == 0)
            15         init_state ^= (1<<(bit_num+SIZE));
            16     else if(x == 3)
            17         init_state ^= (1<<(bit_num-SIZE));
            18     else {
            19         init_state ^= (1<<(bit_num+SIZE));
            20         init_state ^= (1<<(bit_num-SIZE));
            21     }
            22     if(y==0)
            23         init_state ^= (1<<(bit_num+1));
            24     else if(y==3)
            25         init_state ^= (1<<(bit_num-1));
            26     else {
            27         init_state ^= (1<<(bit_num+1));
            28         init_state ^= (1<<(bit_num-1));
            29     }
            30     return init_state;
            31 }
            32 
            33 void 
            34 dfs(long state, int depth, int count)
            35 {
            36     if(state==END_BLACK || state==END_WHITE) {
            37         min = count < min ? count : min;
            38         return;
            39     }
            40     if(depth >= BIT_MAX || count >= min)
            41         return;
            42     dfs(state, depth+1, count);
            43     dfs(flip(state, depth), depth+1, count+1);
            44 }

            2. 寬度優(yōu)先搜索
             1 #define SIZE 4
             2 #define BIT_MAX 16
             3 const int END_BLACK = 0;
             4 const int END_WHITE = (1<<(BIT_MAX))-1;
             5 /* up, down, left, right */
             6 const int dx[] = {-1100};
             7 const int dy[] = {00-11};
             8 const int idx_diff[] = {-SIZE, SIZE, -11};
             9 struct State {
            10     long state;
            11     int count; /* minimum number of rounds needed to reach 'state' */
            12 };
            13 struct State queue[1<<BIT_MAX];
            14 int visited[1<<BIT_MAX];
            15 int head, tail;
            16 long state; /* the low 16 bits represents the current state */
            17 
            18 int
            19 is_valid(int x, int y)
            20 {
            21     return (x>=0 && x<SIZE && y>=0 && y<SIZE);
            22 }
            23 
            24 /*
            25  * tricky of bit-operation
            26  * 1 ^ x = ~x
            27  * 0 ^ x = x
            28  */
            29 long
            30 flip(long state, int x, int y)
            31 {
            32     int i, index = x*SIZE + y;
            33     state ^= (1<<index);
            34     for(i=0; i<4; i++) {
            35         if(is_valid(x+dx[i], y+dy[i]))
            36             state ^= (1<<(index+idx_diff[i]));
            37     }
            38     return state;
            39 }

            posted on 2010-07-05 10:51 simplyzhao 閱讀(123) 評論(0)  編輯 收藏 引用 所屬分類: B_搜索

            導(dǎo)航

            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品久久新婚兰兰| 九九久久99综合一区二区| 久久久这里有精品| 老男人久久青草av高清| 69SEX久久精品国产麻豆| 久久e热在这里只有国产中文精品99| 国产精品成人久久久久三级午夜电影| 久久国产精品一区| 男女久久久国产一区二区三区| 久久精品国产免费| 久久天天婷婷五月俺也去| 久久久久久夜精品精品免费啦| 久久精品亚洲男人的天堂| 久久人人爽爽爽人久久久| 色婷婷狠狠久久综合五月| 99国产精品久久| 久久人人爽人人爽人人片AV不 | 亚洲AV无一区二区三区久久| 久久久中文字幕| 伊人久久大香线蕉亚洲| 久久精品国产99久久丝袜| 久久本道伊人久久| 久久人人爽人人爽人人片AV不| 亚洲欧美成人久久综合中文网| 久久精品国产精品青草app| 久久无码人妻一区二区三区午夜| 亚洲国产精品无码久久久久久曰| 久久99精品综合国产首页| 亚洲AV日韩AV天堂久久| 亚洲伊人久久成综合人影院| 久久国产高清一区二区三区| 久久国产亚洲精品麻豆| 国产精品免费看久久久| 久久99热只有频精品8| 亚洲午夜久久久久久噜噜噜| 伊人久久综合精品无码AV专区| 国产69精品久久久久观看软件| 亚洲国产精品成人久久蜜臀| 久久中文字幕精品| 伊人久久精品无码av一区| 青青草原精品99久久精品66|