蓝桥杯-小朋友崇拜圈

小朋友崇拜圈
班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?

小朋友编号为1,2,3,…N
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。

要求输出一个整数,表示满足条件的最大圈的人数。

例如:
输入:
9
1 2 3 4 5 6 7 8 9
3 4 2 5 3 8 4 6 9

则程序应该输出:
4

代码

#include <iostream>
using namespace std;
const int N = 1e5 + 2;
int arr[N];
int n;
int count = 0;
int circle[N];
int res = -1;
void dfs(int x)
{
    //碰到一个环路
    if (arr[x] == circle[0])
    {
        res = max(res,++count);
        return ;
    }  
    if (count >= n)
    {
        return ;
    }
    circle[count++] = arr[x];
    dfs(arr[x]);
    count--;
}
int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> arr[i];
    }
    //从每个小朋友出发,看是否能够形成环
    for(int i = 1;i <= 9;i++)
    {
        count = 0;
        circle[count++] = i;
        dfs(arr[i]);
    }
    cout << res <<endl;
    return 0;
}

 

posted @ 2023-01-30 11:58  写在风中的信  阅读(41)  评论(0编辑  收藏  举报