题意
传送门 LCP 09. 最小跳跃次数
题解
观察状态转移,建图并非 D A G DAG DAG,考虑图论。由于只求最小边数, B F S BFS BFS 即可。
class Solution
{
public:
int minJump(vector<int> &jump)
{
int n = jump.size(), lb = 0;
vector<int> d(n + 1, INT_MAX);
queue<int> q;
d[0] = 0;
q.push(0);
while (!q.empty())
{
int v = q.front();
q.pop();
if (v == n) break;
int nxt = min(v + jump[v], n);
if (d[nxt] == INT_MAX)
{
d[nxt] = d[v] + 1;
q.push(nxt);
}
for (int i = v - 1; i >= lb; i--)
{
if (d[i] == INT_MAX)
{
d[i] = d[v] + 1;
q.push(i);
}
}
lb = max(lb, v);
}
return d[n];
}
};