• <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 山泉彎延 閱讀(551) 評論(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--------------------*/
            日本亚洲色大成网站WWW久久 | 久久国产精品无| 久久受www免费人成_看片中文| 亚洲精品国产美女久久久| 99久久精品国产免看国产一区| 欧美午夜精品久久久久久浪潮| 久久无码人妻一区二区三区午夜| 国产91久久综合| 久久SE精品一区二区| 国产精品无码久久综合网| 人妻无码αv中文字幕久久琪琪布| 国产精品99久久99久久久| 久久久久久毛片免费看| 国产精品美女久久久| 一日本道伊人久久综合影| 精品久久久久久综合日本| 久久精品日日躁夜夜躁欧美| 久久久久国产精品嫩草影院| 99久久婷婷免费国产综合精品| 亚洲伊人久久综合中文成人网| 99久久综合国产精品二区| 久久人人爽人人爽人人AV| 久久免费看黄a级毛片| 久久国产免费直播| 色综合久久精品中文字幕首页| 麻豆成人久久精品二区三区免费| 18禁黄久久久AAA片| 久久久久无码中| 久久天天躁狠狠躁夜夜2020老熟妇| 精品久久久久久中文字幕| WWW婷婷AV久久久影片| 久久久久亚洲AV片无码下载蜜桃 | 国内精品久久久久久野外| 色偷偷偷久久伊人大杳蕉| 午夜不卡久久精品无码免费| 久久久久久精品久久久久| 色狠狠久久综合网| 7777精品久久久大香线蕉| 久久久久精品国产亚洲AV无码 | 国产成人久久精品一区二区三区| 久久精品国产清自在天天线|