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

            gzwzm06

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評論 :: 0 Trackbacks

            四叉樹
            Memory: 492K Time: 110MS
            Language: C++ Result: Accepted

            沒能分析出數(shù)據(jù)的隱藏信息,處理的時候顯得很笨重,速度又慢
            #include <stdio.h>
            #include 
            <string>
            using namespace std ;

            const int MAXN = 520 ;
            const int SIZE = 300000 ;

            const char TABLE[16= '0''1''2''3''4''5''6',
                        
            '7''8''9''A''B''C''D''E''F' }
             ;
            //四叉樹節(jié)點結(jié)構(gòu)
            struct NODE
            {
                
            char m_flag ; //狀態(tài)
                int m_fpos ;  //四個兒子的位置
                int m_spos ;
                
            int m_tpos ;
                
            int m_fopos ;
            }
            Msg[SIZE];

            int g_MP ;
            int N ;
            char map[MAXN][MAXN] ;
            string RMsg ;
            char hexArray[65000] ;
            //判斷子孫節(jié)點的狀態(tài)
            int Analyse( const int& a, const int& b )
            {
                
            int mark = 0 ;
                
            if ( a == 1 ){
                    mark 
            = 5 ;
                }

                
            else if ( b == 1 )
                
            {
                    mark 
            = 1 ;
                }


                
            return mark ;
            }

            //對圖像進行分割,記錄四叉樹的節(jié)點信息
            int Divide( const int& lx, const int& ly, const int& rx, const int& ry, int& _a, int& _b )
            {
                _a 
            = _b = 0 ;

                
            if ( lx >= rx ){
                    Msg[g_MP
            ++].m_flag = '0' ;
                    
            if ( map[lx][ly] == '1' )
                    
            {
                        _b 
            = 1 ;            
                        Msg[g_MP
            ++].m_flag = '1' ;
                    }

                    
            else {
                        Msg[g_MP
            ++].m_flag = '0' ;
                    }

                    
            return g_MP - 2;
                }

                
            else {
                    
            int a , b , c , d , t , midx , midy ;
                    
            int pos = g_MP ;
                    g_MP
            ++ ;

                    midx 
            = (( rx + lx ) >> 1) ;
                    midy 
            = (( ry + ly ) >> 1) ;

                    Msg[pos].m_fpos 
            = Divide( lx, ly, midx, midy, _a, _b ) ;
                    a 
            = Analyse( _a, _b ) ;

                    Msg[pos].m_spos 
            = Divide( lx, midy + 1, midx, ry, _a, _b ) ;
                    b 
            = Analyse( _a, _b ) ;

                    Msg[pos].m_tpos 
            = Divide( midx + 1, ly, rx, midy, _a, _b ) ;
                    c 
            = Analyse( _a, _b ) ;

                    Msg[pos].m_fopos 
            = Divide( midx + 1, midy + 1, rx, ry, _a, _b ) ;
                    d 
            = Analyse( _a, _b ) ;

                    t 
            = a + b + c + d ; 

                    
            if ( t == 4 )  //全為1
                    {
                        _a 
            = 0 ;
                        _b 
            = 1 ;
                        Msg[pos].m_flag 
            = '0' ;
                        Msg[pos 
            + 1].m_flag = '1' ;
                        g_MP 
            = pos + 2 ;
                    }

                    
            else if ( t == 0 ) //全為0
                    {
                        _a 
            = _b = 0 ;
                        Msg[pos].m_flag 
            = '0' ;
                        Msg[pos 
            + 1].m_flag = '0' ;
                        g_MP 
            = pos + 2 ;
                    }

                    
            else if ( t != 0 ) //有分支
                    {
                        _a 
            = 1 ;
                        _b 
            = 0 ;
                        Msg[pos].m_flag 
            = '1' ;
                    }


                    
            return pos ;
                }

            }

            //轉(zhuǎn)化成四叉樹表達(dá)式
            void Reverse( )
            {
                
            const int MAX = 5000 ;
                
            int Q[MAX], h = 0 , t = 1 ;

                Q[
            0= 0 ;

                
            while ( h != t )
                
            {
                    
            int x = Q[h] ;
                    h 
            = ( h + 1 ) % MAX ;

                    
            if ( Msg[x].m_flag == '1' )
                    
            {
                        RMsg 
            = '1' + RMsg ;
                        Q[t] 
            = Msg[x].m_fpos ;
                        t 
            = ( t + 1 ) % MAX ;
                        Q[t] 
            = Msg[x].m_spos ;
                        t 
            = ( t + 1 ) % MAX ;
                        Q[t] 
            = Msg[x].m_tpos ;
                        t 
            = ( t + 1 ) % MAX ;
                        Q[t] 
            = Msg[x].m_fopos ;
                        t 
            = ( t + 1 ) % MAX ;

                    }

                    
            else {
                        RMsg 
            = Msg[x].m_flag + RMsg ;
                        RMsg 
            = Msg[x + 1].m_flag + RMsg ;
                    }

                }

            }

            //用16進制表示
            void Turn()
            {
                
            int i , j , k , m , t ;
                
                k 
            = 0 ;
                
            for ( i = 0 ; i < g_MP ; i += 4 )
                
            {
                    m 
            = 1 ;
                    t 
            = 0 ;
                    
            for ( j = i ; m <= 8 && j < g_MP ; ++j )
                    
            {
                        t 
            = t + (RMsg.at(j) - '0'* m ;
                        m 
            = ( m << 1 ) ;
                    }


                    hexArray[k
            ++= TABLE[t] ;
                }


                
            for ( i = k - 1 ; i >= 0 ; --i )
                
            {
                    printf(
            "%c", hexArray[i]) ;
                }

                printf(
            "\n") ;
            }


            void Init()
            {
                g_MP 
            = 0 ;
                Msg[
            0].m_flag = 0 ;
                RMsg 
            = "\0" ;
            }


            void Work()
            {
                
            int a, b ;

                Divide( 
            00, N - 1, N - 1 , a, b ) ;

                Reverse() ;

                Turn() ;
            }


            int main()
            {
                
            int t , i , j ;

            //    freopen("in.txt", "r", stdin) ;

                scanf(
            "%d"&t) ;

                
            while ( t != 0 )
                
            {
                    scanf(
            "%d"&N) ;
                    getchar() ;

                    Init() ;

                    
            for ( i = 0 ; i < N ; ++i )
                    
            {
                        
            for ( j = 0 ; j < N ; ++j )
                        
            {
                            scanf(
            "%c "&map[i][j]) ;
                        }

                    }

                    
                    Work() ;
                    t
            -- ;
                }

                
            return 0 ;
            }
            posted on 2008-11-01 20:47 閱讀(288) 評論(0)  編輯 收藏 引用 所屬分類: 與Tree相關(guān)的題
            久久青草国产手机看片福利盒子| 日批日出水久久亚洲精品tv| 日韩美女18网站久久精品| 免费久久人人爽人人爽av| 国产精品久久久久aaaa| 蜜臀av性久久久久蜜臀aⅴ| 日韩人妻无码精品久久免费一| 久久精品99久久香蕉国产色戒| 精品久久久久久亚洲精品| 亚洲午夜久久久久妓女影院| 日韩欧美亚洲综合久久影院Ds | 久久99国产一区二区三区| 亚洲国产成人久久综合碰| 99热精品久久只有精品| 久久无码人妻一区二区三区 | 伊人久久大香线蕉AV色婷婷色 | 久久无码人妻一区二区三区| 久久av无码专区亚洲av桃花岛| 77777亚洲午夜久久多人| 久久综合精品国产二区无码| 精品无码久久久久久国产| 色偷偷88888欧美精品久久久| 国产高清美女一级a毛片久久w| 97久久天天综合色天天综合色hd| 久久久噜噜噜久久中文字幕色伊伊| 91久久九九无码成人网站| 久久久久99这里有精品10| 久久久噜噜噜www成人网| 久久综合久久综合亚洲| 欧美日韩精品久久久免费观看| 久久免费视频观看| 一本一道久久精品综合| 久久亚洲美女精品国产精品| 久久99久久99精品免视看动漫| 少妇内射兰兰久久| 99久久精品影院老鸭窝| 波多野结衣中文字幕久久 | a高清免费毛片久久| 久久亚洲精品视频| 国内精品伊人久久久久av一坑| 国内精品久久久久影院薰衣草|