7-71 跳跃 (50 分)
Drizzle 被困到一条充满数字的方块路中,假设这条路由一个非负的整数数组m
组成,Drizzle 最开始的位置在下标 start
处,当他位于下标i
位置时可以向前或者向后跳跃m[i]
步数,已知元素值为0
处的位置是出口,且只能通过出口出去,不可能数组越界,请你通过编程计算出Drizzle能否逃出这里。
要求:
输入:第一行输入数组m
的长度n
第二行输入数组元素,空格分割开 第三行输入起始下标start
示例:
输入:
7
4 2 3 0 3 1 2
5
输出:
True
范围:
- 1 <= m.length <= 5 * 10^4
- 0 <= m[i] < m.length
- 0 <= start < m.length
-
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int n, m[50000]; int Visited[50000]; int index=0; void Visit(int start,const int* m) { if (Visited[start] != 1&&start>=0&&start<n&&m[start]!=0) { Visited[start] = 1; Visit(start - Visited[start],m); Visit(start + Visited[start], m); } if (m[start] == 0&&start>=0&&start<n) index=1; } int main() { int i; int start; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &m[i]); scanf("%d", &start); Visit(start, m); if (index) printf("True"); else printf("False"); system("pause"); return 0; }