参考代码:
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语言代码)浏览:1178 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1884 |
C语言训练-求素数问题 (C语言代码)浏览:727 |
回文串 (C语言代码)浏览:2858 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:528 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:632 |
水仙花 (C语言代码)浏览:1052 |
A+B for Input-Output Practice (V) (C语言代码)浏览:466 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1479 |