• <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)識號
            };

            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)識號改為對應(yīng)的行號
                    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;
            }

            測試數(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| 久久精品国产一区二区电影| 人妻少妇久久中文字幕一区二区| 国产亚洲精品久久久久秋霞 | 久久国产美女免费观看精品| 久久无码AV中文出轨人妻| 久久精品aⅴ无码中文字字幕重口| 久久99国产亚洲高清观看首页| 国产精品久久婷婷六月丁香| 亚洲嫩草影院久久精品| 99久久婷婷国产综合亚洲| 久久久久久久波多野结衣高潮 | 伊人久久大香线蕉综合热线| 久久久久亚洲av综合波多野结衣 | 93精91精品国产综合久久香蕉| 最新久久免费视频| 久久人人爽人人人人片av| 久久国产精品二国产精品| 久久国产免费| 少妇熟女久久综合网色欲| 久久国产亚洲精品| 7777精品伊人久久久大香线蕉| 欧美久久天天综合香蕉伊| 精品久久亚洲中文无码| 久久人人爽人人爽人人片AV不| 女人高潮久久久叫人喷水| 久久精品国产99国产精品导航| 午夜视频久久久久一区 | 精品无码久久久久国产| 精品久久久久久国产免费了| 人妻丰满?V无码久久不卡| 波多野结衣AV无码久久一区| 久久精品国产99国产电影网| 色8激情欧美成人久久综合电| 99久久免费国产精品热| 伊人久久五月天| 亚洲精品乱码久久久久久不卡| 亚洲精品无码久久久久| 少妇无套内谢久久久久| 久久99国产精品久久99小说| 久久久人妻精品无码一区|