参考代码:
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二级辅导-计负均正 (C语言代码)浏览:516 |
C语言训练-字符串正反连接 (C语言代码)浏览:622 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:668 |
简单的a+b (C++语言代码)浏览:858 |
WU-整数平均值 (C++代码)浏览:1244 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:587 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:660 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:557 |
剪刀石头布 (C语言代码)浏览:1436 |