没什么难度
#include <stdc++.h>
using namespace std;
bool canReach(const vector<int>& arr, int start) {
unordered_set<int> used;
stack<int> dfs;
if (0 == arr[start]) return true;
dfs.push(start);
used.insert(start);
while (!dfs.empty()) {
auto pos = dfs.top();
dfs.pop();
auto new_pos = pos + arr[pos];
if (new_pos < (int)arr.size() && used.find(new_pos) == used.end()) {
used.insert(new_pos);
dfs.push(new_pos);
if (arr[new_pos] == 0) return true;
}
new_pos = pos - arr[pos];
if (new_pos >= 0 && used.find(new_pos) == used.end()) {
used.insert(new_pos);
dfs.push(new_pos);
if (arr[new_pos] == 0) return true;
}
}
return false;
}
int main() {
cout << boolalpha << canReach({0}, 0) << endl;
return 0;
}