参考代码:
import java.util.Scanner; public class Main { static int n, arr[]; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); arr = new int[n + 1]; for(int i = 1; i <= n; i++) arr[i] = scanner.nextInt(); scanner.close(); int res = 0; vis = new int[n + 1]; for(int i = 0; i < n; i++) if(vis[i] == 0)//如果这个小朋友曾经打过标记,说明他所在的圈已经判断了 { flag = 0; res = Math.max(res, dfs(i)); } System.out.print(res); } static int vis[], flag;//标记,直接记长度 static int dfs(int index) { flag++; if(vis[index] > 0) return flag - vis[index];//圈长度 vis[index] = flag; return dfs(arr[index]);//去找index的崇拜小朋友 } }
0.0分
5 人评分
剪刀石头布 (C语言代码)不知道怎么直接在scanf中用枚举变量浏览:1306 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:567 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:459 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:636 |
母牛的故事 (C语言代码)浏览:715 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1148 |
1035 题解浏览:778 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:629 |
简单的a+b (C语言代码)浏览:628 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:539 |