蓝桥杯-----2018年第九届真题-----小朋友崇拜圈

题目:

  • 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
    在一个游戏中,需要小朋友坐一个圈,
    每个小朋友都有自己最崇拜的小朋友在他的右手边。
    求满足条件的圈最大多少人?
    小朋友编号为1,2,3,…N
    输入
    输入第一行,一个整数N(3<N<100000)
    接下来一行N个整数,由空格分开。
    输出
    要求输出一个整数,表示满足条件的最大圈的人数。
    样例输入:
    9
    3 4 2 5 3 8 4 6 9
    样例输出:
    4
    在这里插入图片描述

  • 思路:通过递归查找对应结点的方式,flag[]记录每个结点的对应位置,如果该结点未被记录,则说明未经过该结点,反之亦然,直到找到重复记录的结点,说明出现循环,并且重复的结点为循环开始结点,然后在该点进行递归,进一步计算出结点数,同时flagCircle[]标记下处于循环体中的数的位置,然后在回溯时将未处于循环体中的数的flag[]标记为0,防止重复.

#include<stdio.h>
#define MAXSIZE 100000 //最大数
int fa[MAXSIZE], flag[MAXSIZE], flagCircle[MAXSIZE];
//fa[]表示祖先结点//flag[]记录对应结点位置,判断是否重复出现(循环)
//flagCircle[]记录标记循环内的每个元素 不在循环之中的标记为0 在循环之中的标记为1
int Count(int i, int m, int count
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值