• <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 閱讀(1220) 評論(1)  編輯 收藏 引用 所屬分類: OJ
            /**
             * FloodFill算法,深度遍歷搜索。
             
            */
            #include 
            <iostream>
            #include 
            <map>
            using namespace std;

            struct Cube
            {
                
            bool used;          // 是否已經使用
                int cood[4];        // 坐標
                int neighbor[4][2]; // 相鄰標識號
            };

            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)
                {
                    
            // 輸入數據
                    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];
                    }

                    
            // 標識號改為對應的行號
                    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;
                    }

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

            測試數據:
            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  回復  更多評論   

            2009-04-07 19:23 by wZt
            好啊 以前做 看到題目不太懂就放棄了
            久久精品二区| 亚洲精品无码久久久影院相关影片| 久久99精品久久只有精品| 久久久久成人精品无码中文字幕| 久久久久女人精品毛片| 99久久精品九九亚洲精品| 国产69精品久久久久久人妻精品| 久久精品国产亚洲AV嫖农村妇女| 99久久精品国产一区二区三区| 久久久久久国产a免费观看黄色大片| 久久国产精品99精品国产| 久久精品这里只有精99品| 久久国产亚洲精品无码| 亚洲国产精品成人久久蜜臀 | 久久精品一区二区三区AV| 国产午夜免费高清久久影院| 中文精品久久久久人妻| 久久久久成人精品无码 | 欧美日韩精品久久久久| 91久久精一区二区三区大全| 久久久午夜精品福利内容| 精品久久久久久无码国产| 国产午夜精品理论片久久影视 | 精品久久人人爽天天玩人人妻| 少妇精品久久久一区二区三区 | 欧美午夜A∨大片久久| 久久精品国产亚洲欧美| 国产Av激情久久无码天堂| 久久超碰97人人做人人爱| 久久亚洲精品中文字幕| 久久人人爽人人爽人人片av麻烦| 久久有码中文字幕| 亚洲国产精品嫩草影院久久| 亚洲午夜精品久久久久久人妖| 国产精品久久久久久影院| 国产亚洲精品美女久久久| 九九99精品久久久久久| 久久国产精品久久国产精品| 国产99久久精品一区二区| 国产精品久久成人影院| 99久久综合狠狠综合久久|