074_加油站问题(优先队列)


   加油站问题,一辆车在每个加油站可以加一定数量的油,邮箱容量没有上限,走一个单位的路程消耗一个单位的油量,问汽车是否能够到达终点,如果可以,最少加几次油?
   从这个角度思考问题较方便:

   当汽车经过某个加油站时,只把油装在车上,并不加入油箱。等到油箱为空时再加油,与在加油站加油的效果一致。(《挑战程序竞赛》第二版的说法为获得一次加油的机会)

   所以当油箱用尽时,选择最大的那桶油来加入邮箱便可。


   XCODE C++代码如下:



//
//  074_expedition.cpp
//  changlle
//
//  Created by user on 12/29/15.
//  Copyright (c) 2015 user. All rights reserved.
//

#include 
#include 
#include 
using namespace std;

int N=4;
int L=25;
int P=10;
int A[4]={10,14,20,21};
int B[4]={10,5,2,4};


int main() {
    
    int tank=P;
    priority_queue que;
    que.push(0);
    int D[4];
    D[0]=A[0];
    for (int i=1;i<4;i++)
        D[i]=A[i]-A[i-1];
    
    int count=0;
    int i=0;

    
    while(i<=3) {
        
        if (tank-D[i]<0)
          {
              
              if(que.empty()){
                  count=-1;
                  break;
                  
              }
             
              tank=tank+que.top();
              cout<



你可能感兴趣的:(挑战程序竞赛,2nd,优先队列)