深搜#1 TLE 100分 蒟蒻求助
查看原帖
深搜#1 TLE 100分 蒟蒻求助
524197
superFw楼主2022/11/18 20:25

深搜#1 TLE 100分 蒟蒻求助

#include <bits/stdc++.h>

using namespace std;


const int N = 205;
const int INF = 0x3f3f3f3f;
int n, a, b, minn;
int k[N];
int is_vis[N];	//有没有去过


void search(int x, int step)
{
	if (x == b)
	{
		minn = min(minn, step);
		return;
	}
	else if (step <= minn)			//只有比 minn小的  才有必要继续搜下去
	{
		is_vis[x] = 1;			//来过
		//往上走
		//能往上  并且没有来过  如果来过  很有可能就死循环了
		if (x + k[x] <= n  && !is_vis[x + k[x]])
		{
			search(x + k[x], step + 1);
		}

		//往下走
		if (x - k[x] >= 1 && !is_vis[x - k[x]])
		{
			search(x - k[x], step + 1);
		}
		is_vis[x] = 0;			//回溯
	}



}


int main ()
{
	cin >> n >> a >> b;
	for (int i = 1; i <= n; i++)
	{
		cin >> k[i];
	}
	minn = INF, is_vis[a] = 1;
	search(a, 0);
	if (minn != INF)
		cout << minn;
	else
		cout << "-1";



}
2022/11/18 20:25
加载中...