返回题解分享
讨论 / 题解分享/ 帖子详情

奇怪的电梯 - 题解

DFS



最少次数,每次都要更新p数组,初始为正无穷

#include <iostream>
#include <cstring>

using namespace std;

const int N = 210;

int n, a, b;
int d[N];
int p[N];
int flag;

void dfs(int u, int level)
{
    p[level] = u;
    if (level == b)
    {
        flag = true;
        return;
    }
    if (level + d[level] <= n && u + 1 < p[level + d[level]])
        dfs(u + 1, level + d[level]);

    if (level - d[level] >= 1 && u + 1 < p[level - d[level]])

        dfs(u + 1, level - d[level]);
}

void solve()
{
    memset(p, 0x3f, sizeof p);
    cin >> n >> a >> b;
    for (int i = 1; i <= n; i++)
        cin >> d[i];
    dfs(0, a);
    if (flag)
        cout << p[b] << endl;
    else
        cout << -1 << endl;
}

int main()
{
    solve();

    system("pause");
    return 0;
}
0 回复 0 转发 0 喜欢 4 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!