- 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关系的,跳完前一个格子后,后续的格子才会被开启,
格子间的依赖关系由多组steps数组给出,steps[0]表示前一个格子,steps[1]表示steps[0]可以开启的格子:比如[0,1]表示从跳完第0个格子以后第1个格子就开启了,比如[2,1],[2,3]表示跳完第2个格子后第1个格子和第3个格子就被开启了import java.util.Arrays;
public class Question36 {
public static void main(String[] args) {
int n = 4;
int[][] arr = new int[][]{{0, 1},{0, 2},{0, 2}};
System.out.println(answer(n, arr));
}
/**
* @param n 表示地面上一共有n个格子
* @param arr 给定一个数组,存放所有的step关系
* @return 可以跳完输出yes,否则输出no
*/
public static String answer(int n, int[][] arr){
//对数组进行排序,
Arrays.sort(arr, (o1, o2) -> {
if (o1[0] == o2[0]){
return o1[1] - o2[1];
}
return o1[0] - o2[0];
});
//road 所有要跳的格子
int[] road = new int[n];
road[0] = 1;
if (arr[0][0] != 0){
return "NO";
}
//只能保证steps规则可以走完
for (int[] ints : arr) {
if (road[ints[0]] == 0) {
return "NO";
} else {
road[ints[1]] = 1;
}
}
for (int i = 0; i < n; i++) {
if (road[i] == 0){
return "NO";
}
}
return "YES";
}
}