zoukankan      html  css  js  c++  java
  • 计蒜客-题库-跳跃游戏

    题目

    给定一个非负整数数组,假定你的初始位置为数组第一个下标。

    数组中的每个元素代表你在那个位置能够跳跃的最大长度。

    请确认你是否能够跳跃到数组的最后一个下标。

    例如:A=[2,3,1,1,4]能够跳跃到最后一个下标,输出true

    A=[3,2,1,0,4]不能跳跃到最后一个下标,输出false

    输入格式

    第一行输入一个正整数 n(1≤n≤500),接下来的一行 n个整数,输入数组 Ai

    输出格式

    如果能跳到最后一个下标,输出true,否则输出false

    样例输入

    5
    2 0 2 0 1

    样例输出

    true

    思路

    从最后一个下标n-1往前看,依次查找能够直接到达n-1的点,然后看这些点中有没有点是可以从下标0到达的

    代码

    #include<iostream>
    using namespace std;
    int n;
    int s[500];
    int t[500] = { 0 };//用来记录结果,避免重复计算:-1表示不可达 0表示未计算 1表示可达
    //src代表终点,des代表起点
    bool dfs(int src, int des){
        if (src == 0){//src为0,表示当前就是终点,也就是能够到达
            return true;
        }
        if (des < 0){//无法到达
            return false;
        }
        if (s[des] >= src - des){//找到能直接到达src的点
            if (des == 0){//如果该点是起点,说明能从起点到达src
                return true;
            }
            if (t[des] == -1){
                return false;
            }
            if (t[des] == 0){
                if (dfs(des, des - 1)){
                    t[des] = 1;
                    return true;
                }
                else{
                    t[des] = -1;
                }
            }
            if (t[des] == 1){
                return true;
            }
        }
        if (dfs(src, des - 1)){
            return true;
        }
        return false;
    }
    int main(){
        cin >> n;
        for (int i = 0; i < n; ++i){
            cin >> s[i];
        }
        cout << (dfs(n - 1, n - 2) ? "true" : "false") << endl;
        return 0;
    }
  • 相关阅读:
    HTML5
    js实现查找字符串中最多的字符的个数
    get和post的区别
    第十七篇 类的特殊成员
    第十八篇 面向对象修饰符
    MariaDB+Keepalived双主高可用配置MySQL-HA
    linux命令详解——crontab
    Java的内存泄漏
    jvm监控工具jconsole进行远程监控配置
    loadrunner执行场景时报Error -27040: Data Format Extension: Init: Internal error问题解决
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/6776241.html
Copyright © 2011-2022 走看看