牛客对应题目链接:过桥 (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 的位置” 这一条件。以后遇到题意不太清楚的题目,应该先从样例下手,通过画图帮助理解。