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

            lzm

            who dare win.
            posts - 14, comments - 29, trackbacks - 0, articles - 0

            poj 1022 Packing Unit 4D Cubes

            Posted on 2009-03-18 12:04 lzmagic 閱讀(1232) 評論(1)  編輯 收藏 引用 所屬分類: OJ
            /**
             * FloodFill算法,深度遍歷搜索。
             
            */
            #include 
            <iostream>
            #include 
            <map>
            using namespace std;

            struct Cube
            {
                
            bool used;          // 是否已經(jīng)使用
                int cood[4];        // 坐標(biāo)
                int neighbor[4][2]; // 相鄰標(biāo)識(shí)號(hào)
            };

            void FloodFill(int row, int cnt, Cube *cube, int maxmin[4][2])
            {
                
            if (cube[row].used == false)
                {
                    cube[row].used 
            = true;

                    
            int i, j, k, row2;
                    
            for (i = 0; i < 4++i)
                        
            for (j = 0; j < 2++j)
                            
            if (cube[row].neighbor[i][j] != -1 && cube[cube[row].neighbor[i][j]].used == false)
                            {
                                row2 
            = cube[row].neighbor[i][j];
                                
            for (k = 0; k < 4++k)
                                    cube[row2].cood[k] 
            = cube[row].cood[k];
                                
            if (j == 0)
                                {
                                    
            ++cube[row2].cood[i];
                                    
            if (maxmin[i][0< cube[row2].cood[i])
                                        maxmin[i][
            0= cube[row2].cood[i];
                                }
                                
            else
                                {
                                    
            --cube[row2].cood[i];
                                    
            if (maxmin[i][1> cube[row2].cood[i])
                                        maxmin[i][
            1= cube[row2].cood[i];
                                }
                                FloodFill(row2, cnt, cube, maxmin);
                            }
                }
            }

            int main(int argc, char** argv) {

                
            bool ok;
                
            int cnt;    // 1 <= cnt <= 100
                int maxmin[4][2];
                
            int minv;
                Cube cube[
            100];
                map 
            <intint> idmap;

                
            int t, i, j, k, id;
                
            for (cin >> t; t > 0--t)
                {
                    
            // 輸入數(shù)據(jù)
                    cin >> cnt;
                    idmap.clear();
                    
            for (i = 0; i < cnt; ++i)
                    {
                        cube[i].used 
            = false;
                        cin 
            >> id;
                        idmap[id] 
            = i;
                        
            for (j = 0; j < 4++j)
                            
            for (k = 0; k < 2++k)
                                cin 
            >> cube[i].neighbor[j][k];
                    }

                    
            // 標(biāo)識(shí)號(hào)改為對應(yīng)的行號(hào)
                    for (i = 0; i < cnt; ++i)
                        
            for (j = 0; j < 4++j)
                            
            for (k = 0; k < 2++k)
                                cube[i].neighbor[j][k] 
            = (cube[i].neighbor[j][k] == 0? -1 : idmap[cube[i].neighbor[j][k]];

                    
            // 判斷是否對稱
                    ok = true;
                    
            for (i = 0; i < cnt && ok; ++i)
                        
            for (j = 0; j < 4 && ok; ++j)
                            
            for (k = 0; k < 2 && ok; ++k)
                                
            if (cube[i].neighbor[j][k] != -1 && cube[cube[i].neighbor[j][k]].neighbor[j][1 - k] != i)
                                    ok 
            = false;
                    
            if (!ok)
                    {
                        cout 
            << "Inconsistent" << endl;
                        
            continue;
                    }

                    
            // Flood Fill 算法 (種子染色法)
                    for (i = 0; i < 4++i) cube[i].cood[i] = 0;
                    
            for (i = 0; i < 4++i) maxmin[i][0= maxmin[i][1= 0;
                    FloodFill(
            0, cnt, cube, maxmin);

                    
            // 判斷是否連通
                    ok = true;
                    
            for (i = 0; i < cnt && ok; ++i)
                        
            if (cube[i].used == false)
                            ok 
            = false;
                    
            if (!ok)
                    {
                        cout 
            << "Inconsistent" << endl;
                        
            continue;
                    }

                    
            // 計(jì)算最小體積
                    minv = 1;
                    
            for (i = 0; i < 4++i)
                        minv 
            *= maxmin[i][0- maxmin[i][1+ 1;
                    cout 
            << minv << endl;
                }
                
            return 0;
            }

            測試數(shù)據(jù):
            Input:
            6
            9
            1 2 3 4 5 6 7 8 9
            2 0 1 0 0 0 0 0 0
            3 1 0 0 0 0 0 0 0
            4 0 0 0 1 0 0 0 0
            5 0 0 1 0 0 0 0 0
            6 0 0 0 0 0 1 0 0
            7 0 0 0 0 1 0 0 0
            8 0 0 0 0 0 0 0 1
            9 0 0 0 0 0 0 1 0
            2
            3 0 0 1 0 0 0 0 0
            1 0 0 3 0 0 0 0 0
            4
            1 2 0 0 0 0 0 0 0
            2 0 1 0 0 0 0 0 0
            3 0 0 4 0 0 0 0 0
            4 0 0 0 3 0 0 0 0
            5
            101 2 0 0 0 0 0 0 0
            2 0 101 321 0 0 0 0 0
            321 4 0 0 2 0 0 0 0
            4 5 321 0 0 0 0 0 0
            5 0 4 0 0 0 0 0 0
            1
            10 0 0 0 0 0 0 0 0
            4
            1 0 2 4 0 0 0 0 0
            2 1 0 3 0 0 0 0 0
            3 4 0 0 2 0 0 0 0
            4 0 3 0 1 0 0 0 0

            Output:
            81
            Inconsistent
            Inconsistent
            8
            1
            4

            Feedback

            # re: [poj 1022] Packing Unit 4D Cubes  回復(fù)  更多評論   

            2009-04-07 19:23 by wZt
            好啊 以前做 看到題目不太懂就放棄了
            久久久久久国产精品无码超碰 | 无码人妻精品一区二区三区久久久| 香蕉久久久久久狠狠色| 久久人人爽人人爽人人片AV高清| 久久w5ww成w人免费| 久久久无码精品午夜| 久久亚洲私人国产精品| 久久久无码精品亚洲日韩软件| 精品久久久无码21p发布| 一本大道久久a久久精品综合| 亚洲精品午夜国产va久久| 91久久婷婷国产综合精品青草| 伊人色综合久久天天网| 国产91久久综合| 国产精品18久久久久久vr| 亚洲va中文字幕无码久久| 欧美久久亚洲精品| 东京热TOKYO综合久久精品| 国内精品久久久久久久久电影网 | 嫩草影院久久国产精品| 人妻久久久一区二区三区| 久久午夜免费视频| 四虎影视久久久免费观看| 精品久久久久久久久久久久久久久| 精品多毛少妇人妻AV免费久久| 国内精品久久久久影院网站| 精品一区二区久久| 久久无码人妻一区二区三区午夜| 久久成人18免费网站| 亚洲精品成人网久久久久久| 51久久夜色精品国产| 狠狠色丁香久久婷婷综| 久久久久夜夜夜精品国产| 精品精品国产自在久久高清| 久久久亚洲欧洲日产国码二区| 亚洲欧美日韩中文久久| 色综合久久综合中文综合网| 99精品国产在热久久无毒不卡 | 久久人人添人人爽添人人片牛牛| 久久www免费人成看国产片| 久久无码AV中文出轨人妻|