班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?
小朋友编号为1,2,3,…N
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。
要求输出一个整数,表示满足条件的最大圈的人数。
例如:
输入:
9
3 4 2 5 3 8 4 6 9
则程序应该输出:
4
输入:
30
22 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15
程序应该输出:
16
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Demo9崇拜圈 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); //接受用户输入的数字
int[] arr = new int[n]; //定义数组保存用户输入的数字
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
int max = 0; //定义最大崇拜圈
for (int i : arr) { //遍历arr数组
List<Integer> list = new ArrayList<Integer>(); //定义list集合
int x = i; //x替换i
int count = 0; //临时变量,统计符合崇拜人数
while (!list.contains(x)) { //判断x是否存在于集合里,不存在则进入循环
list.add(x); //将x存入集合中
x = arr[x - 1]; //寻找下一个崇拜的人(核心代码)
count++; //统计人数
}
if (count > max) { //如果临时统计大于max
max = count; //count值给max
}
}
System.out.println(max); //输出即可
}
}