您的位置:首页 > 其它

计蒜客 跳跃游戏

2017-10-19 17:45 162 查看

计蒜客 跳跃游戏

题目

描述

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

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

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

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

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

输入格式

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

​i

​​ 。

输出格式

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

样例输入

5
2 0 2 0 1


样例输出

true


题解

DFS

把能跳的点打上真值,DFS所有可以到达的点,若包含n那么输出true,否则输出false

代码

#include<cstdio>
#include<cstring>
using namespace std;

int n,sign;
int a[505];
bool vis[505];

int readln()
{
int x=0;
char ch=getchar();
while (ch<'0'&&ch>'9') ch=getchar();
while ('0'<=ch&&ch<='9') x=x*10+ch-48,ch=getchar();
return x;
}

void dfs(int x)
{
if (x==n) {sign=1;return;}
vis[x]=true;
for (int i=1;i<=a[x];i++)
{
if (x+i>n) break;
if (!vis[x+i]) dfs(x+i);
if (sign==1) return;
}
}

int main()
{
n=readln();
for (int i=1;i<=n;i++) a[i]=readln();
memset(vis,false,sizeof(vis));
dfs(1);
if (sign==1) printf("true"); else printf("false");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: