电梯调度算法

 代码如下:
     

#include  < iostream >
  
using   namespace  std ;
 
 
const   int  N  =   10  ;
 
int  person[N + 1 =   {0 , 2 , 5 , 7 , 3 , 5 , 2 , 62 , 6 , 3}  ; 
  
  
int  floor2()
  
{
      
//先计算出在第一层停止的时候 所需要的花费
       int T = 0;
       
int N1 = 0 ; //在第一层以下下的人数 
       int N2 = person[1] ; //在第一层处下的人数 
       int N3 = 0 ;      //在第一层之上下电梯的人数 
       int floor =  1 ;
       
for(int i = 2 ; i <= N ;i++//先计算出第1层停止需要爬取的楼层数目 
       {
         T 
+= person[i] * (i - 1) ;
         N3 
+= person[i] ;     
          
       }

        
       
for(int i = 2 ; i <= N ;i++)
       
{
         
if(N1 + N2 <= N3) //说明第i+1层的结果会大于第i层 
           {
               T 
+= N1 + N2 - N3 ;
               N1 
+= N2 ;
               N2 
= person[i] ; 
               N3 
-= person[i] ;
               floor 
= i ;
               
           }
     
           
else  //否则第i层的结果已经最小,故不需要计算第i+1层 
           break ; 
            
       }
     
       
return floor ;
  }
 
  
  
  
int  floor1()  // 使用简单算法计算 
   {
      
int tempfloor = 0 ;
      
int min = 6553 ;//存储最小值
      int floor = 1   ;//存储停靠的楼层 
      int i , j ;
      
      
for( i = 1 ; i <= N ;i++//表示第i楼层电梯停靠 
      {
        tempfloor 
= 0 ;
                       
        
for( j = 1 ; j < i ;j++)      
            tempfloor 
+= (i - j) * person[j] ;       
                         
        
for(j = i + 1 ; j <= N ; j++)         
            tempfloor 
+= (j - i) * person[j] ;    
        
        
if(min > tempfloor)   
        
{
          min 
= tempfloor ;
          floor 
= i ;          
        }
       
        
     
//   cout<<"tempfloor"<<i<<":"<<tempfloor<<endl;                   
      }

      
return floor ;
  }

  
  
  
int  main()
  
{      
    
int temp1 = floor1() ;  
    
int temp2 = floor2() ;  
    cout
<<temp1<<" "<<temp2<<endl ;
    getchar() ;
    
return 0 ;    
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值