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

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

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

            1. 深度優先搜索
             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. 寬度優先搜索
             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_搜索

            導航

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99久久精品国产一区二区三区| 国产精品99久久99久久久| 国产毛片久久久久久国产毛片| 国产—久久香蕉国产线看观看| 亚州日韩精品专区久久久| 99久久免费国产精品特黄| 无码人妻精品一区二区三区久久久 | 久久久久久精品成人免费图片| 久久无码AV中文出轨人妻| 国内精品伊人久久久久AV影院| 久久亚洲国产午夜精品理论片| 久久国产影院| 精品精品国产自在久久高清| 久久精品国产精品亚洲| 久久夜色精品国产噜噜麻豆 | 久久99精品久久久久子伦| 国产亚洲精久久久久久无码AV| 久久这里有精品| 少妇内射兰兰久久| 四虎国产精品成人免费久久| 久久亚洲精品成人AV| 色天使久久综合网天天| 久久99精品国产麻豆婷婷| 国产精品久久久久久一区二区三区| 久久久久亚洲爆乳少妇无| 精品国产一区二区三区久久| 亚洲乱码中文字幕久久孕妇黑人| 久久播电影网| 久久亚洲国产成人影院网站 | 久久久久久国产精品无码超碰| 久久久久久毛片免费看| 精品久久久久久国产免费了| 国内精品久久久久久久97牛牛| 无码人妻久久一区二区三区免费| 亚洲伊人久久成综合人影院| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久亚洲精品无码播放| 久久96国产精品久久久| 97久久精品人妻人人搡人人玩| 欧美噜噜久久久XXX| 久久亚洲中文字幕精品有坂深雪|