• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            算法實驗三(集裝箱)

            Posted on 2008-06-05 09:05 山泉彎延 閱讀(558) 評論(0)  編輯 收藏 引用
            /*
            08.6.2
            */

            /*------------------INCLUDES BEGIN---------------*/
            #include 
            <cstdlib>
            #include 
            <iostream>
            #include 
            <fstream>
            #include 
            <string>
            #include 
            <cmath>
            #include 
            <algorithm>
            #include 
            <QApplication>
            #include 
            <QWidget>
            #include 
            <QPainter>
            #include 
            <Qt>
            /*-------------------INCLUDES END----------------*/


            /*-------------------MACROS BEGIN----------------*/
            #define INPUTFILE  
            "./c30.txt"
            #define MAX        
            100000
            #define PI         
            3.141592653589793238462643383279
            #define 
            ERROR      1e-7
            #define BUFFER     
            100
            #define RANG_LOW   
            0 
            #define RANG_UP    
            6283
            /*-------------------MACROS END------------------*/


            /*-----------NAMESPACE STD DECLARE BEGIN---------*/
            using std::cin;
            using std::ifstream;
            using std::ios;
            using std::cout;
            using std::endl;
            using std::sort;
            using std::
            string;
            /*----------NAMESPACE STD DECLARE  END------------*/



            /*-------------CLASS CIRCLE BEGIN-----------------*/
            class circle{
                  
            public:
                  
            double r;
                  
            double x;
                  
            double y;  
                  bool   v;  
            };
            /*-------------CLASS CIRCLE END-------------------*/


            /*-------------CLASS GREEDY BEGIN-----------------*/
                
            /*THE MOST IMPORTANT CLASS IN THIS PROGRAM*/
            class Greedy
            {
            public:
                    Greedy(void);
                    ~Greedy(){};
                    void GreedyCPU(void);
            //THE MAIN METHOD IN THIS CLASS
                    void AvailRate(void); 
            //CACULATE THE AVAILEBAL  RATE
                    circle c[BUFFER];   
            //CIRCLE BUFFER 
                    
            int getN(){return N;}
                    
            double getW(){return W;}
                    
            double getH(){return H;} 
                    
            double getP(){return p;}
             
             
            private
                    friend bool mycmp(circle t1,circle t2); 
                    bool CanBeInput(
            int which);//JUDGE CAN C[WHICH] BE PUT INTO THE CHEST
                    ifstream  Fin;      
            //INPUT DATA   
                    
            int N;              //CIRCLE NUMBER
                    
            double W;           //CHEST WIDTH
                    
            double H;           //CHEST HIGHT
                    
            double L;           //CHEST LONG 
                    
            double s;           //CHEST AREA
                    
            double sc;          //CIRCLE TOTAL AREA
                    
            double p;           //AVAILE RATE
                    
            int    k;           //CAN PUTED CIRCLE NUM
                    
            int t;              //FROM C[T] THAT CAN BE PUT INTO THE CHEST   
            }; 
            /*GREEDY METHEDS*/ 
            /*===================================================*/
            bool mycmp(circle t1,circle t2) 
            {
                 return t1.r
            >t2.r;

            /*===================================================*/ 
            Greedy::Greedy()
            {
                Fin.open(INPUTFILE,ios::in);
                Fin
            >>N;
                Fin
            >>W;
                Fin
            >>H;
                Fin
            >>L; 
                
            for(int i=0;i<N;i++)
                {
                  Fin
            >>c[i].r;
                  c[i].v
            = false;
                }
                sort(c,c
            +N,mycmp);
                t
            =-1
                s
            =W*H;
                sc
            =0;
                k
            =0;
                       
            }
            /*===================================================*/
            bool Greedy::CanBeInput(
            int which)
            {   
              
            if(c[which].x+c[which].r>W+ERROR||c[which].y+c[which].r>H+ERROR
                 ||c[which].x
            -c[which].r+ERROR < 0||c[which].y-c[which].r+ERROR < 0)
              return 
            false;
              
            for(int i=t;i<which;i++)//將 i=0 改為 i=t; 
              
            if(c[i].v==true)
              {
               
            double t1=c[which].x-c[i].x;
               
            double t2=c[which].y-c[i].y;
               
            double d =sqrt(t1*t1+t2*t2);
               
            if( c[which].r+c[i].r> d+ERROR  )
                return  
            false;             
              }    
              return 
            true;
            }
            /*===================================================*/
            void Greedy::GreedyCPU(void)      
            {
              bool   boo
            =false;
              
            double tempX=MAX;
              
            double tempY=MAX;
              
            double minX=MAX;
              
            double minY=MAX;   
              
            for(int i=0;i<N;i++)
                  
            if(c[i].r*2+ERROR <&& c[i].r*2+ERROR<H)
                  {
                  c[i].x
            =c[i].r;
                  c[i].y
            =c[i].r;
                  c[i].v
            =true;
                  t
            =i;
                  break;               
                  } 
              
            if(t==-1)
                {cout
            <<"null circle can be inputed"<<endl;return;}

              
            for(int i=t+1;i<N;i++)
              { 
                
            for(int m=t;m<i;m++)
                {   
            if(c[m].v==true){
                     
            for(int k=RANG_LOW;k<RANG_UP;k++)      
                     { 
                       c[i].x
            =c[m].x+(c[i].r+c[m].r)*cos(double(k)/1000);
                       c[i].y
            =c[m].y+(c[i].r+c[m].r)*sin(double(k)/1000);
                     
                       
            if(CanBeInput(i))
                       {
                        
                         boo
            =true;
                         
            if(minX>c[i].x)
                          {minX
            =c[i].x;tempY=c[i].y;}
                         
            if(minY>c[i].y)
                          {minY
            =c[i].y;tempX=c[i].x;}                 
                       }
            //if
                     }
            //for
                
                    
            if(boo)
                    {
                     
            if(minX<minY){c[i].x = minX;c[i].y = tempY;} 
                     
            else {c[i].x = tempX; c[i].y = minY;} 
                    
                     c[i].v
            =true;
                     minX
            =MAX;
                     minY
            =MAX;
                     boo
            =false;
                     break;          
                    }
            //if boo
                  }
            //if (c[m].v==true)
                }
            //for m
              } 
            //for  i  
            }
            /*===================================================*/  
            void Greedy::AvailRate()
            {
               
            for(int i=0;i<N;i++)
                
            if(c[i].v==true)
                  {k
            ++;
                   sc
            +=c[i].r*c[i].r*PI;
                  }
              p
            =sc/s;
            }
            /*===================================================*/     

            /*--------------CLASS GREEDY END-------------------*/

            /*--------------CLASS NEWBOX BEGIN-----------------*/

            class NEWBOX:
            public QWidget
            {   
                
            public:
                    NEWBOX(QWidget 
            *parent=0);
                    
                protected:
                    void paintEvent(QPaintEvent 
            *event); 
                
            private:
                    Greedy g;
            };
            /*===================================================*/ 
            NEWBOX::NEWBOX(QWidget 
            *parent):QWidget(parent)
            {
                 setFixedSize(g.getW()
            *50,g.getH()*50);
                 g.GreedyCPU();
                 g.AvailRate(); 
                 char temp[
            5];
                 sprintf(temp,
            "%f",g.getP());
                 char title[
            30]="using:";
                 strcat(title,temp);
                 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);
                 
            int num=g.getN();
                 
            for(int i=0;i<num;i++)
                    
            if(g.c[i].v==true){
                        float x 
            = (float)g.c[i].x*50;
                        float y 
            = (float)g.c[i].y*50;
                        float r 
            = (float)g.c[i].r*50;
                        painter.drawEllipse(QRectF(x
            -r,g.getH()*50-y-r,2*r,2*r));
                    }
            }
            /*===================================================*/ 




            /*--------------CLASS NEWBOX END------------------*/



            /*--------------------MAIN BEGIN-------------------*/
            int main(int argc, char *argv[])
            {   
                
                QApplication app(argc, argv);
                NEWBOX   newbox;
                newbox.show();
                return app.exec();
            }
            /*--------------------MAIN END--------------------*/
            国产精品美女久久久| 青青草国产97免久久费观看| 欧美久久综合九色综合| 国产999精品久久久久久| 久久久久四虎国产精品| 日本久久久久久中文字幕| 精品久久久久久国产| 亚洲国产精久久久久久久| 2021国产成人精品久久| 国产精品内射久久久久欢欢| 国产精品免费看久久久香蕉| 久久久久亚洲AV综合波多野结衣| 色老头网站久久网| 欧美牲交A欧牲交aⅴ久久| 久久福利青草精品资源站免费| 精品国产福利久久久| 93精91精品国产综合久久香蕉 | 欧美性大战久久久久久| 无码任你躁久久久久久老妇| 亚洲AV无码久久| 青青草原综合久久大伊人精品| 久久99精品久久久久久不卡 | 亚洲av日韩精品久久久久久a | 久久精品成人免费网站| 国产精品美女久久久免费| 国产成人综合久久精品红 | 秋霞久久国产精品电影院| 久久精品免费大片国产大片| 久久SE精品一区二区| 丁香五月综合久久激情| 久久婷婷五月综合色奶水99啪| 久久AV高清无码| 亚洲国产综合久久天堂 | 精品久久久无码人妻中文字幕| 久久91亚洲人成电影网站| 亚洲国产成人久久综合一区77| 国内精品伊人久久久久av一坑| 日本精品久久久久影院日本 | 色综合久久最新中文字幕| 久久久久亚洲精品日久生情 | 亚洲va久久久久|