貪心算法-跳躍游戲二


給定一個非負整數數組,假定你的初始位置為數組第一個下標。

數組中的每個元素代表你在那個位置能夠跳躍的最大長度。

你的目標是到達最后一個下標,並且使用最少的跳躍次數。

例如:

 A=[2,3,1,1,4],到達最后一個下標的最少跳躍次數為 2。(先跳躍 1 步,從下標 0 到 1,然后跳躍 3 步,到達最后一個下標。一共兩次)

輸入格式

第一行輸入一個正整數 n(1n100) ,接下來的一行,輸入 n 個整數,表示數組 A。

輸出格式

最后輸出最少的跳躍次數。

樣例輸入

5
3 1 1 1 1

樣例輸出

 2

分析:

 通過上面例題分析,類似於貪心算法,每次跳一步后,步數cnt++,然后判斷下次跳的最遠的距離,直到到達s[n-1]為止,如下圖所示:

 

代碼如下:

#include<stdio.h>
 int n,s[10000]={0},ct=0;
 int bfs(int i)
 {
     int k,j=0,l,max=0;
     if(i>=n-1) return 0;    //找到便退出
     k=s[i];ct++;
     if(i+k>=n-1) return 0; //找到便退出

     for(l=i+1;l<=i+k;l++)   //for()找到下次能跳到最遠的距離
     {
         
          if(max<=l+s[l])     //更新數據
         {
             j=l;max=l+s[l];      
         }
     }
     
     bfs(j);          //跳到最遠的數組里
     
 }
 int main()
 {
     int i;
     scanf("%d",&n);
     for(i=0;i<n;i++)
     {
         scanf("%d",&s[i]); 
     }
     bfs(0);
     printf("%d",ct);    //打印步數
     return 0;
 } 

 

 下節便來講動態規划,鏈接:http://www.cnblogs.com/lifexy/p/7550159.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM