• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評論 :: 0 Trackbacks

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

            沒能分析出數據的隱藏信息,處理的時候顯得很笨重,速度又慢
            #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' }
             ;
            //四叉樹節點結構
            struct NODE
            {
                
            char m_flag ; //狀態
                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] ;
            //判斷子孫節點的狀態
            int Analyse( const int& a, const int& b )
            {
                
            int mark = 0 ;
                
            if ( a == 1 ){
                    mark 
            = 5 ;
                }

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


                
            return mark ;
            }

            //對圖像進行分割,記錄四叉樹的節點信息
            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 ;
                }

            }

            //轉化成四叉樹表達式
            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 閱讀(277) 評論(0)  編輯 收藏 引用 所屬分類: 與Tree相關的題
            久久99精品久久久久久久久久| 欧美性大战久久久久久| 久久久久久久久久久| 久久精品国产一区二区| 久久精品一区二区国产| 91精品国产综合久久婷婷| 色狠狠久久AV五月综合| 久久精品国产亚洲av麻豆图片| 中文字幕亚洲综合久久菠萝蜜| 久久99国产一区二区三区| 精品久久久久久久久久久久久久久 | 国产成人精品综合久久久久| 亚洲天堂久久久| 亚洲色欲久久久综合网东京热| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 欧美日韩精品久久久久| 欧美一级久久久久久久大| 亚洲精品国产综合久久一线| 婷婷国产天堂久久综合五月| 成人综合久久精品色婷婷 | 无码国内精品久久人妻蜜桃| 久久精品国产久精国产思思| 99久久超碰中文字幕伊人| 久久久精品免费国产四虎| 久久久WWW成人免费毛片| 日韩欧美亚洲综合久久| 亚洲色婷婷综合久久| 国产成年无码久久久久毛片| 亚洲国产精品人久久| 天天做夜夜做久久做狠狠| 亚洲国产精品无码久久98| 久久99精品国产99久久| 国产精品综合久久第一页| 久久亚洲熟女cc98cm| 97久久精品午夜一区二区| 久久久久久亚洲精品无码| 久久久久亚洲av成人网人人软件| 欧美va久久久噜噜噜久久| 精品久久久久久99人妻| 少妇内射兰兰久久| 久久青青草原精品国产软件|