實驗三 貪心算法 汽車加油問題

 提高題二: 汽車加油問題

 

一、實驗目的與要求

1、掌握汽車加油問題的算法;

2、進一步掌握貪心算法;

二、實驗題

     一輛汽車加滿油後可以行駛N千米。旅途中有若干個加油站。若要使沿途的加油次數最少,設計一個有效的算法,指出應在那些加油站停靠加油。並證明你的算法能產生一個最優解。

三、實驗提示

把兩加油站的距離放在數組中,a[1..n]表示從起始位置開始跑,經過n個加油站,a[k]表示第k1個加油站到第k個加油站的距離。汽車在運行的過程中如果能跑到下一個站則不加油,否則要加油。

 

三、源代碼

 

  1. import java.util.*; 
  2.  
  3. import java.io.*; 
  4.  
  5.   
  6.  
  7.   
  8.  
  9. public class SF_QicheJiayouzhan 
  10.  
  11.  
  12.        public static int greedy(int x[],int n){ 
  13.  
  14.               int sum=0
  15.  
  16.                      k=x.length, 
  17.  
  18.                      s=0
  19.  
  20.               for (int j=0;j<k ;j++ ) 
  21.  
  22.               { 
  23.  
  24.                      if (x[j]>n) 
  25.  
  26.                      { 
  27.  
  28.                             System.out.println("無法到達目的地!!!"); 
  29.  
  30.                             return -1; 
  31.  
  32.                      } 
  33.  
  34.                      
  35.  
  36.               } 
  37.  
  38.               for (int i=0;i<k ;i++ ) 
  39.  
  40.               { 
  41.  
  42.                      
  43.  
  44.                      s+=x[i]; 
  45.  
  46.                      if (s>n) 
  47.  
  48.                      { 
  49.  
  50.                             sum++; 
  51.  
  52.                             s=x[i]; 
  53.  
  54.   
  55.  
  56.                             } 
  57.  
  58.                      } 
  59.  
  60.               return sum; 
  61.  
  62.        } 
  63.  
  64.        public static void main(String[] args) 
  65.  
  66.        { 
  67.  
  68.               Scanner read =new Scanner(System.in); 
  69.  
  70.               System.out.println("請輸入汽車加滿油一次最大行駛旅程:"); 
  71.  
  72.               int n=read.nextInt(); 
  73.  
  74.               System.out.println("請輸入加油站個數:"); 
  75.  
  76.               int num=read.nextInt(); 
  77.  
  78.               int a[]=new int[num]; 
  79.  
  80.               System.out.println("請輸入每個加油站的相隔距離:"); 
  81.  
  82.               for (int i=0;i<num ;i++ ) 
  83.  
  84.               { 
  85.  
  86.                      a[i]=read.nextInt(); 
  87.  
  88.               } 
  89.  
  90.               int q=greedy(a,n); 
  91.  
  92.               System.out.println("要加油"+q+"次。"); 
  93.  
  94.        } 
  95.  

結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章