• <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 閱讀(286) 評論(0)  編輯 收藏 引用 所屬分類: 與Tree相關的題
            777米奇久久最新地址| 亚洲国产精品无码久久青草| 欧美777精品久久久久网| 国内精品久久久久久久久电影网| 精品久久久久久国产三级| 久久人做人爽一区二区三区| 亚洲国产精品无码久久久秋霞2| 国产精品久久久久久久久久免费| 伊人热热久久原色播放www| 久久青青草原国产精品免费| 狠狠色狠狠色综合久久| 久久99精品久久久久久水蜜桃| 精品乱码久久久久久久| 国产精品久久久久久五月尺| 伊人久久综合热线大杳蕉下载| 国内高清久久久久久| 一本久久综合亚洲鲁鲁五月天| 久久久综合九色合综国产| 性做久久久久久久| 久久亚洲sm情趣捆绑调教| 欧美粉嫩小泬久久久久久久 | 亚洲欧美一级久久精品| 久久精品国产91久久麻豆自制| 久久无码AV中文出轨人妻| 久久精品国产一区二区| 99久久国产主播综合精品| 久久精品www| 99久久综合狠狠综合久久| 精品免费tv久久久久久久| 999久久久免费精品国产| 996久久国产精品线观看| 久久亚洲AV成人出白浆无码国产 | 午夜久久久久久禁播电影| 久久人与动人物a级毛片| 久久久久亚洲av综合波多野结衣| 内射无码专区久久亚洲| 久久成人小视频| 亚洲AV日韩AV永久无码久久| 99久久99久久精品免费看蜜桃| 久久精品国产久精国产| 久久精品免费网站网|