### 题目分析 * 一共$n$个木桩,青蛙现在在第$1$个木桩上。 * 每个木桩上面有一个数字,表示从此木桩出发,最远可以跳几个木桩。比如有数字$2$,表示一次最远可以跳$2$个木桩。 * 从$1$号木桩出发,跳到$n$号木桩上,问**最少**需要几步? $$\large [2,1,5,1,3]$$ * 不能只看眼前,不看将来,不是本次跳的越远越好,挑最远的跳,可能就略过了**以后更有利**的木桩。
* 从当前木桩($x$)出发,可以有几种选择呢?$1<=?<=x$种选择。
* **可不可以向后跳呢**? * 可能需要一个状态记录的数组$st$,装$st[3]=1$ * 最短路径采用广度优先遍历$bfs$ --- (1)输入$n$,$N=110$,$a[N]$ (2) int st[N]; (3) ```c++ queue q; //初始化,老大入队列 //老大已使用过 while(q.size()){ auto t=q.front(); q.pop(); if(目标位置是终点){ 输出t.second break; } 从1到当前木桩上的数字进行遍历 { for (从 1 到 t.first+1) { 下一个位置 x = t.first + i; 如果x走过了 continue; //填充到队列中,做为下一跳的起点 q.push({x, 当前步数 + 1}); 标识x已使用过 } } } ```