【洛谷】P1135 奇怪的電梯(dfs深搜)

【題目】

https://www.luogu.com.cn/problem/P1135

【思路】

從起點開始,只要沒越界就向上下搜,全部搜完得到答案 。注意剪枝。

【代碼】

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int N, A, B, p[205], result = 0x7ffffff;
bool f[205];

void dfs(int now, int step) {
	if (now == B) {
		result = min(step, result);
		return;
	}
	if (step > result) {
		return;
	}
	f[now] = true;
	if (now + p[now] <= N && !f[now + p[now]]) {
		dfs(now + p[now], step + 1);
	}
	if (now - p[now] >= 1 && !f[now - p[now]]) {
		dfs(now - p[now], step + 1);
	}
	f[now] = false;
}

int main() {
	cin >> N >> A >> B;
	for (int i = 1; i <= N; i++) {
		cin >> p[i];
	}
	dfs(A, 0);

	if (result == 0x7ffffff) {
		cout << "-1" << endl;
	}
	else {
		cout << result << endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章