70分求助
查看原帖
70分求助
1017771
GzkThunder楼主2024/3/10 00:44
//那些/// @brief 都是废话,不要管
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long

/// @brief 
const int MAXN=114514;
/// @brief 
bool flag = true;
/// @brief 
int dist[MAXN];
/// @brief 
bool visited[MAXN];
/// @brief 
int n,a,b;
/// @brief 
int k[MAXN],i;


/// @brief 
/// @param i 
/// @param p 
/// @return 
//写的废话
int up(int i,int p)
{
	return i+k[i];
}
/// @brief 
/// @param i 
/// @param p 
/// @return 
int down(int i,int p)
{
	return i-k[i];
}


/// @brief 
main() {
	cin>>n>>a>>b;
	for (int i = 1; i <= n; i++) {
        cin >> k[i];
    }

	memset(dist, -1, sizeof(dist));
    memset(visited, false, sizeof(visited));
	//vscode自动生成的
    dist[a] = 0;
	visited[a] = true;
	
	while (flag) {
        flag = false;
        for (int i = 1; i <= n; i++) {
            if (visited[i]) {
                int up = i + k[i];
                if (up <= n && !visited[up]) {
                    visited[up] = true;
                    dist[up] = dist[i] + 1;
                    flag = true;
                }

                int down = i - k[i];
                if (down >= 1 && !visited[down]) {
                    visited[down] = true;
                    dist[down] = dist[i] + 1;
                    flag = true;
                }
            }
        }
    }

    cout << dist[b] << endl;


	return 0;
} 

老师写的代码,我写了一半,另一半是我补的.

2024/3/10 00:44
加载中...