牛客对应题目链接:过桥 (nowcoder.com)
一、分析题目
类似层序遍历的思想。
二、代码
//值得学习的代码
#include <iostream>
using namespace std;
const int N = 2010;
int n;
int arr[N];
int bfs()
{
int left = 1, right = 1;
int ret = 0;
while(left <= right)
{
ret++;
int r = right;
for(int i = left; i <= right; i++)
{
r = max(r, arr[i] + i);
if(r >= n)
{
return ret;
}
}
left = right + 1;
right = r;
}
return -1;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++) cin >> arr[i];
cout << bfs() << endl;
return 0;
}
三、反思与改进
看完知道题目的解析后,感觉之前做过这道题,没想起来估计是因为没完全理解清楚题意,其次是漏看了 “当 i + a[i] < 1 时,默认只能传送到 1 的位置” 这一条件。以后遇到题意不太清楚的题目,应该先从样例下手,通过画图帮助理解。