You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.3 KiB
1.3 KiB
题目分析
- 一共
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)
queue<PII> 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已使用过
}
}
}