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

            jake1036

            編程之美1.9 高效安排會(huì)議

             編程之美1.9 高效安排會(huì)議

             一 問(wèn)題描述:

              已知有n位學(xué)生,他們分別對(duì)m個(gè)分組中的若干個(gè)感興趣。
              每個(gè)學(xué)生都必須能夠參加,他們所感興趣的部門的會(huì)議。
              每個(gè)會(huì)議的開(kāi)會(huì)時(shí)間都為t,求會(huì)議如何安排使得需要的總時(shí)間最短。
             
              其中一個(gè)最簡(jiǎn)單的方法:
              即每個(gè)會(huì)議不會(huì)同時(shí)召開(kāi),則時(shí)間變?yōu)閙 * t。
              
             二 問(wèn)題分析:

              下面我們需要尋找可以同時(shí)召開(kāi)的會(huì)議,來(lái)進(jìn)一步減少花費(fèi)的總時(shí)間。

              問(wèn)題建模:
               這個(gè)題目可以轉(zhuǎn)換為圖的最少著色問(wèn)題:
               (1)即將兩個(gè)不能同時(shí)召開(kāi)的會(huì)議,用同一條直線進(jìn)行連接。
               (2)然后對(duì)圖中的每個(gè)頂點(diǎn)進(jìn)行著色,保證有直線連接的兩個(gè)節(jié)點(diǎn)之間不允許重色。
               (3)先隨意將其中一個(gè)節(jié)點(diǎn)染色,然后對(duì)剩余的n-1個(gè)節(jié)點(diǎn),進(jìn)行n個(gè)顏色的枚舉,
                  復(fù)雜度為o((n-1)^n) 。
               (4)著色之后,需要對(duì)每一個(gè)頂點(diǎn)進(jìn)行判斷,則復(fù)雜度為o(n*n)。
               (5)則全部的時(shí)間復(fù)雜度為o((n-1)^n * o(n*n))


              三代碼如下:
                 

            #include <iostream>
             
            using namespace std ;
             
            const int N = 3 ; //學(xué)生數(shù)目 
             const int M = 4 ; //會(huì)議的數(shù)目
             
             
            int meet[N][M] = //表示每個(gè)學(xué)生感興趣的會(huì)議信息 
              {
                 
            {1 , 1 , 1 , 0} ,  
                 
            {0 , 1 , 1 , 1} ,
                 
            {0 , 1 , 1 , 0} ,                
              }
             ;
                 
             
            int path[M][M] =  //根據(jù)meet二維數(shù)組。建立起 
             {
                
            {0 , 0 , 1 , 0} , 
                
            {0 , 0 , 0 , 1} ,
                
            {1 , 0 , 0 , 0} ,
                
            {0 , 1 , 0 , 0}     
             }
             ;    
                 
                 
             
            int color[M] = {0 , -1 , -1 ,-1}//初始化顏色數(shù)組,每一個(gè)頂點(diǎn)有一個(gè)顏色
              
             
              
              
            bool judge(int i , int j)//判斷第i個(gè)節(jié)點(diǎn),當(dāng)涂j顏色的時(shí)候,是否滿足
              {
                  
            for(int w = 0 ; w < M ;w++
                   
            {
                     
            if(path[i][w]) //若是i 和 w兩點(diǎn)相鄰,則需要判斷 兩者的顏色是否相同 
                      {
                         
            if(color[i] == color[w])           
                             
            return false ;       
                      }
                            
                   }

                   
            return true ;
              }

              
             
            int arrange()
             
            {
                
            int num = 0 ; //表示可以同時(shí)安排的會(huì)議的數(shù)目   
               for(int i =  1 ; i < M ;i++)//表示每一個(gè)頂點(diǎn) 
               {
                  
            for(int j = 0 ; j < M ;j++)    //表示每一種顏色     
                   {
                      color[i] 
            = j ; //對(duì)應(yīng)節(jié)點(diǎn)設(shè)置為顏色j,設(shè)置完畢之后,判斷該顏色是否滿足
                      if(judge(i , j)) //判斷第i個(gè)節(jié)點(diǎn),當(dāng)涂j顏色的時(shí)候,是否滿足 
                       {
                       
                         
            break;          
                       }
                                                   
                   }

              }

               
            for(int i = 0 ; i< M ;i++
               
            {
                  cout
            <<color[i]<<" " ;     
                  
            if(num < color[i])
                    num 
            = color[i] ;
               }
                
                
            return num + 1;                                                            
             }

             
             
             
            int main()
             
            {
                
            int time = 5 ; //每個(gè)會(huì)議持續(xù)的時(shí)間 
                int t = arrange() ;   
                cout
            <<"花費(fèi)總的時(shí)間:"<<time *  t<<endl ;
                 
               getchar() ;
               
            return 0 ;    
             }
             




             

            posted on 2011-06-30 10:28 kahn 閱讀(343) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            亚洲AV无码久久| 爱做久久久久久| 久久99国产乱子伦精品免费| 无码国内精品久久人妻| 久久精品成人免费看| 日日狠狠久久偷偷色综合0 | 久久免费视频6| 久久99精品久久久大学生| 亚洲国产精品无码久久98| 精品久久久久久99人妻| 亚洲va中文字幕无码久久| 99久久伊人精品综合观看| 久久久亚洲欧洲日产国码是AV| 国产精品久久久久9999高清| 日韩AV毛片精品久久久| 久久99精品国产99久久| 亚洲国产另类久久久精品黑人| 91性高湖久久久久| 99久久这里只有精品| 狠狠色婷婷久久综合频道日韩| 久久久久国产一级毛片高清版| 久久乐国产综合亚洲精品| 热久久国产精品| 国产精品免费福利久久| 免费精品久久天干天干| 久久影院午夜理论片无码| 久久久艹| 久久国产香蕉视频| 国产精自产拍久久久久久蜜| 国内精品久久久久久野外| 国产精品一久久香蕉国产线看 | www.久久热| 亚洲国产精品无码久久一区二区| 天天做夜夜做久久做狠狠| 久久精品国产精品亚洲| 久久久综合香蕉尹人综合网| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久久久久亚洲精品无码| 久久久国产精品福利免费| 欧美激情精品久久久久| 国产精品免费看久久久香蕉|