貪心算法-跳躍遊戲二
阿新 • • 發佈:2017-09-19
sample clu itl 判斷 main %d 數據 str 算法
給定一個非負整數數組,假定你的初始位置為數組第一個下標。
數組中的每個元素代表你在那個位置能夠跳躍的最大長度。
你的目標是到達最後一個下標,並且使用最少的跳躍次數。
例如:
A=[2,3,1,1,4],到達最後一個下標的最少跳躍次數為 2。(先跳躍 1 步,從下標 0 到 1,然後跳躍 3 步,到達最後一個下標。一共兩次)
輸入格式
第一行輸入一個正整數 n(1≤n≤100) ,接下來的一行,輸入 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; }
貪心算法-跳躍遊戲二