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

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            伊人久久亚洲综合影院| 亚洲国产精久久久久久久| 亚洲精品乱码久久久久久不卡| 久久国产精品二国产精品| 国产香蕉久久精品综合网| 新狼窝色AV性久久久久久| 国产精品99久久精品| 色诱久久av| 久久99精品国产麻豆| 久久无码精品一区二区三区| 久久亚洲AV成人出白浆无码国产| 亚洲国产精品久久久久婷婷软件| 亚洲人成电影网站久久| 婷婷综合久久狠狠色99h| 久久久精品人妻一区二区三区蜜桃| 久久精品免费观看| 97精品依人久久久大香线蕉97 | 国产精品美女久久久久av爽| 国产成人无码精品久久久性色| 91久久九九无码成人网站| 亚洲女久久久噜噜噜熟女| 亚洲?V乱码久久精品蜜桃 | 一本色综合网久久| 久久久久国产一区二区| 品成人欧美大片久久国产欧美...| 亚洲人成精品久久久久| 一本大道久久东京热无码AV| 久久99精品久久久久久秒播| 久久美女网站免费| 国产午夜久久影院| 久久国产精品无码HDAV| 午夜精品久久久久久中宇| 亚洲中文字幕无码久久综合网| 人妻无码久久精品| 婷婷久久综合九色综合绿巨人 | 国产精品9999久久久久| 久久不见久久见免费视频7| 蜜臀av性久久久久蜜臀aⅴ麻豆| 中文精品99久久国产 | 国产精品久久久久AV福利动漫| 99久久精品免费看国产一区二区三区 |