蓝桥练习题-小朋友崇拜圈

0小朋友崇拜圈 - 蓝桥云课 (lanqiao.cn)

思路:遍历每个小朋友作为起点计算出以他为中心的环的大小,存入答案,并与下个小朋友构成的环比较,取两者中较大的值

dfs(x,st,res)x表示前一个小朋友崇拜的人,st表示崇拜圈的起点,res表示该圈当前已存在多少小朋友。

C++代码:

#include<iostream>
using namespace std;
typedef long long ll;
ll a[10010];//i位置的小朋友崇拜的小朋友a[i]
ll N;
ll ans=0;

void dfs(ll x,ll st,ll res)//x崇拜的人,st起始地点,res当前环中元素个数
{
  if(res>N)//找不到环时直接退出
  return ;
  if(st==x)//当找到一整个环后判断两个环的大小
  {
    ans=max(ans,res);
    return ;
  }
  dfs(a[x],st,res+1);//a[x]迭代的关键
}
int main()
{
  // 请在此输入您的代码
  cin>>N;
  for(int i=1;i<=N;i++)
  {
    cin>>a[i];
  }
  for(int i=1;i<=N;i++)
  {
    dfs(a[i],i,1);
  }
  cout<<ans;
  return 0;
}

希望对有需要的人能有所帮助,欢迎大家有什么问题到评论区里一起讨论!

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值