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

            newplan

            阿基米德在洗澡時發現浮力原理,高興得來不及穿上褲子,跑到街上大喊:Eureka(我找到了)。
            posts - 39, comments - 26, trackbacks - 0, articles - 4
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            算法 實驗 4

            Posted on 2008-06-10 21:47 山泉彎延 閱讀(373) 評論(0)  編輯 收藏 引用
            /*
            6.10
            */
            /*==========INCLUDES BEGIN===============*/ 
            #include 
            <cstdlib>
            #include 
            <iostream>
            #include 
            <fstream>
            #include 
            <algorithm>
            #include 
            <QApplication>
            #include 
            <QWidget>
            #include 
            <QPainter>
            #include 
            <Qt>

            /*==========INCLUDE END==================*/ 

            /*==========MACROS BEGIN=================*/
            #define  MAX        
            100000000
            #define  BUFFER     
            300
            #define  INPUTFILE  
            "./50.txt"
            /*==========MACROS  END==================*/

            /*==========STD DECLRARS BEGIN===========*/
            using std::cout;
            using std::cin;
            using std::endl;
            using std::ios;
            using std::ifstream;
            using std::sort;
            using std::max;
            /*==========STD DECLARS END===============*/

            /*============STRUCTS BRGIN===============*/ 
            struct 
            Space {
                   
            int x;
                   
            int y;
                   
            int w;
                   
            int h;
                   bool v;
            //IF VISITED THEN V =TURE ELSE FLASE
                   };
            struct Gadget
            {
                   
            int x;
                   
            int y;
                   
            int w;
                   
            int h;
            };
            /*=============STRUCT END=================*/



            /*===========GADGET CUT BEGIN=============*/ 
                    Gadget  result[BUFFER];
                    Gadget  g[BUFFER];
                    
            int      bestH;
                    
            Space   space[BUFFER];
                    
            int spaceNum ;
                    
            int     W;
                    
            int     N;
                    
            int     H;  
                    ifstream Fin; 
                    
            int     deep;   
                    clock_t    start;
                    clock_t     
            end;

            /*-------------FRIENDS METHOD--------------------*/
            bool mycmpG(Gadget t1,Gadget t2){return t1.h
            >t2.h;} 
            /*-------------FRIENDS METHOD--------------------*/
             bool mycompS(
            Space t1,Space t2){return t1.y<t2.y;}
            /*-------------CONSTRUCT METHOD------------------*/
            void init()
            {   
                Fin.open(INPUTFILE,ios::in);
                Fin
            >>N;
                Fin
            >>W;
                
            for(int i=0;i<N;i++)
                  Fin
            >>g[i].h>>g[i].w;
                sort(g,g
            +N,mycmpG);
                
                
            space[0].x=space[0].y=0;
                
            space[0].h=MAX;
                
            space[0].w=W;
                
            for(int i=0;i<N;i++)
                  
            space[0].v=false;
                H
            =0;
                deep
            =0
                bestH 
            = MAX;
                spaceNum 
            = 1
            }   
            /*-------------CUT METHOD------------------*/
            bool canBeCut(Gadget 
            &g,int i,int &TaddSpace)
            {
                
            int addSpace = 0;    
                
            if((space[i].h>=g.h)&&(space[i].w>=g.w)){
                    
            if(space[i].w>g.w){
                        
            space[spaceNum].x = space[i].x+g.w;
                        
            space[spaceNum].y = space[i].y;
                        
            space[spaceNum].h = g.h;
                        
            space[spaceNum].w = space[i].w - g.w;
                        addSpace
            ++;
                    }
                    
            if(space[i].h>g.h){
                        
            space[spaceNum+1].x = space[i].x;    
                        
            space[spaceNum+1].y = space[i].y+g.h;
                        
            if(space[i].h==MAX)
                            
            space[spaceNum+1].h = MAX;
                        
            else
                            
            space[spaceNum+1].h = space[i].h - g.h;
                        
            space[spaceNum+1].w = space[i].w;
                        addSpace
            ++;
                    }
                    g.x 
            = space[i].x;
                    g.y 
            = space[i].y;
                    H 
            = max(H,g.y+g.h);
                    spaceNum 
            += addSpace;
                    TaddSpace 
            = addSpace;
                    return 
            true;
                }
                return 
            false;
            }
            /*-------------THE MAIN METHOD--------------------*/
             void backTrack(
            int which)
            {   
            // if(deep==100000)return;
                
            // else deep++;
                 sort(
            space,space+spaceNum,mycompS);
                 
            Space   temp[BUFFER];
                 
            for(int i=0;i<spaceNum;i++)
                    temp[i] 
            = space[i];    
                 
                 
            if(which==N)
                  {
                    
            if(H<bestH)
                    {    bestH 
            = H;
                        
            for(int i = 0;i<N;i++)
                          result[i]
            =g[i];
                       
                    }
                    return;
                  }
                 
            int addSpace;
                 
            int Num=spaceNum;     
                 
            for(int i=0;i<Num;i++)
                     
            if(space[i].v == false)
                      { 
                        
            int tempH=H;
                        
            if(canBeCut(g[which],i,addSpace))
                        {       
                                
            if(H>bestH)//剪枝 
                                {
                                 H 
            = tempH;
                                 spaceNum 
            -= addSpace;
                                 continue;
                                }
                                
            space[i].v = true;
                                backTrack(which
            +1);
                                spaceNum
            -=addSpace;
                                
            space[i].v = false
                                H 
            = tempH;
                                
            for(int k=0;k<spaceNum;k++)
                                
            space[k] = temp[k];        
                         }         
                      }
                 
            }
            /*===========GADGET CUT END=============*/ 

            /*========NEWBOX CLASS BEGIN============*/
            class NEWBOX:
            public QWidget
            {   
                
            public:
                    NEWBOX(QWidget 
            *parent=0);
                protected:
                    void paintEvent(QPaintEvent 
            *event); 
                
            private:

            };
            /*NEWBOX METHOD*/
            /*-----------------------------------*/
            NEWBOX::NEWBOX(QWidget 
            *parent):QWidget(parent)
            {
                 setFixedSize(W
            *15,30*15);
                 char temp[
            5];
                 sprintf(temp,
            "%d",bestH);
                 char title[
            40]="H:";
                 strcat(title,temp);
                 char temp2[
            20]=" Spend TIME:";
                 char temp3[
            5];
                 sprintf(temp3,
            "%f",(double)(end-start)/CLOCKS_PER_SEC);
                 strcat(temp2,temp3);
                 strcat(title,temp2);
                 setWindowTitle(title);
                 setPalette(QPalette(QColor(
            250250200)));
                 setAutoFillBackground(
            true);
            }
            /*-----------------------------------*/
            void NEWBOX::paintEvent(QPaintEvent 
            *)
            {    QPainter painter(this);
                 painter.setPen(Qt::SolidLine);
                 painter.setBrush(Qt::blue);
                 painter.translate(
            0,0);
                 
            for(int i=0;i<=N;i++)
                 painter.drawRect(result[i].x
            *15,30*15-result[i].y*15,
                 result[i].w
            *15,-result[i].h*15);  
            }

            /*=========NEWBOX CLASS END=============*/

            int main(int argc, char *argv[])
            {   QApplication app(argc, argv);
                init();
                start
            =clock();
                backTrack(
            0);
                
            end= clock();//TIME END HERE
                NEWBOX newb;
                newb.show();
                return app.exec();

            }

            久久精品国产亚洲AV久| 日韩欧美亚洲综合久久影院Ds| 人妻中文久久久久| 国产99久久久国产精免费| 好久久免费视频高清| 99久久精品国产高清一区二区| 亚洲精品无码久久久影院相关影片| 国产精品久久久久久久人人看| 亚洲欧美成人久久综合中文网 | 精品久久人人爽天天玩人人妻| 久久精品无码一区二区三区| 久久国产精品久久国产精品| 久久国产乱子精品免费女| 日本福利片国产午夜久久| 91秦先生久久久久久久| 日韩久久无码免费毛片软件| 色狠狠久久综合网| 久久天天婷婷五月俺也去| 伊人久久无码中文字幕| 国产精品免费福利久久| 久久精品国产精品国产精品污| 久久国产三级无码一区二区| 久久久国产视频| 国产精品欧美久久久天天影视| 国产日韩欧美久久| 蜜桃麻豆WWW久久囤产精品| 丰满少妇高潮惨叫久久久| 久久久99精品成人片中文字幕| 亚洲国产成人精品女人久久久| 日韩人妻无码精品久久免费一| 成人国内精品久久久久影院VR| 久久无码专区国产精品发布| AV色综合久久天堂AV色综合在| 久久精品亚洲男人的天堂| 99精品久久久久久久婷婷| 欧美777精品久久久久网| 久久天天躁狠狠躁夜夜不卡| 国产成人AV综合久久| 久久久精品人妻一区二区三区四| 久久精品国产黑森林| 国产精品美女久久久|