• <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 閱讀(1224) 評論(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
            好啊 以前做 看到題目不太懂就放棄了
            久久精品国产99国产精品导航| 亚洲国产精品狼友中文久久久| 久久国产精品无码一区二区三区| 久久强奷乱码老熟女网站| 亚洲AV无一区二区三区久久| 2021精品国产综合久久| 久久精品中文字幕有码| 狼狼综合久久久久综合网| 超级碰久久免费公开视频| 老男人久久青草av高清| 久久精品国产免费一区| 精品久久人人爽天天玩人人妻| 国产精品久久自在自线观看| 无码人妻久久一区二区三区蜜桃| 色偷偷偷久久伊人大杳蕉| 污污内射久久一区二区欧美日韩| 2021精品国产综合久久| 欧美伊人久久大香线蕉综合| 99久久精品国产毛片| 久久亚洲精品无码AV红樱桃| 女同久久| 久久久精品国产亚洲成人满18免费网站 | 97超级碰碰碰久久久久| 欧美久久一区二区三区| 亚洲综合婷婷久久| 97久久精品午夜一区二区| 国内精品久久久久影院薰衣草| 久久精品一区二区影院| 久久精品视频免费| 久久青草国产精品一区| 久久久久亚洲AV无码专区体验| 久久夜色精品国产亚洲| 伊人久久大香线蕉综合5g| 久久强奷乱码老熟女网站| 久久99国产精品成人欧美| 亚洲国产二区三区久久| 亚洲国产精品久久66| 99热都是精品久久久久久| 久久成人国产精品一区二区| 66精品综合久久久久久久| 99久久精品久久久久久清纯|