zoukankan      html  css  js  c++  java
  • 求圈子用户数_2.0_2

    //A以电影直接或间接关注的所有用户,A是follower,即A关注的
    void followingUsers(unsigned int follower_id, unsigned int hobby_id)
    {
        vector<FollowRelation>::iterator iterTemp = tempFrVec.begin();
        for(; iterTemp != tempFrVec.end(); iterTemp++)
        {
            if(iterTemp->followerId == follower_id && iterTemp->hobbyId == hobby_id && iterTemp->traverseFlag == INIT)
            {
                iterTemp->traverseFlag = IS_TRAVERSE;    
                //followingSet.insert(iterTemp->userId);
                circleSet.insert(iterTemp->userId);
                circleSet.insert(iterTemp->followerId);
                followingUsers(iterTemp->userId, hobby_id);//迭代,直到所有直接的和间接的全部遍历完
            }
        }    
    }
    
    //以电影直接或间接关注A的所有用户,A是user,即关注A的
    void followedUsers(unsigned int user_id, unsigned int hobby_id)
    {
        vector<FollowRelation>::iterator iterTemp = tempFrVec.begin();
        for(; iterTemp != tempFrVec.end(); iterTemp++)
        {
            if(iterTemp->userId == user_id && iterTemp->hobbyId == hobby_id && iterTemp->traverseFlag == INIT)
            {
                iterTemp->traverseFlag = IS_TRAVERSE;    
                //followedSet.insert(iterTemp->followerId);    
                circleSet.insert(iterTemp->followerId);
                circleSet.insert(iterTemp->userId);
                followedUsers(iterTemp->followerId, hobby_id);
            }
        }
    }
    
    /******************************************************************************
    功能:      计算指定(用户,爱好)的圈子的用户数量
    输入参数:
        user_id :  指定用户
        hobby_id:  指定爱好
    返回值:
        成功,返回该圈子的用户数量。
        失败,返回0。
    *******************************************************************************/
    unsigned int CalcUserNum(unsigned int user_id, unsigned int hobby_id)
    {
        //判断指定的用户是否有指定的爱好
        if(isExistCheck(user_id,hobby_id) == -1)
        {
            return 0;
        }
    
        //每次计算之前清空set
        if(!circleSet.empty())
        {
            circleSet.clear();
        }
            
        circleSet.insert(user_id);//圈子数包括自身
    
        //处理关注圈和被关注圈的用户数量
        if(!tempFrVec.empty())
        {
            tempFrVec.clear();
        }
        tempFrVec = followRelationVec;
        followingUsers(user_id, hobby_id);
    
        if(!tempFrVec.empty())
        {
            tempFrVec.clear();
        }
        tempFrVec = followRelationVec;
        followedUsers(user_id, hobby_id);
        
        return circleSet.size();
    }
    
    /******************************************************************************
    功能:清空所有数据
    输入:无
    输出:无  
    返回:无
    *******************************************************************************/
    void Clear(void)
    {
        if(!followRelationVec.empty())
        {
            followRelationVec.clear();
        }    
    
        if(!userHobbysMap.empty())
        {
            userHobbysMap.clear();
        }
        
        if(!circleSet.empty())
        {
            circleSet.clear();
        }
    
        if(!tempFrVec.empty())
        {
            tempFrVec.clear();
        }
    
        return;
    }

    后记,标题说是2.0,其实都写了好多次了,估计都有2.7、2.8了,oj系统上也提交了有10次。
    好在最后10个用例终于全部pass。此题关键是迭代抽象的要好,标记变量设计的漂亮,然后关注链和被关注链要分别迭代。

  • 相关阅读:
    SpringCloud五大组件
    js获取系统信息
    java深入
    java实现群头像合成
    .net读取上传apk文件的包名、软件名称、logo解决方法
    SignalR 跨域设置
    Html5 Video 实现方案
    JS 日期工具类-基于yDate
    图片下载本地缓存时间戳显示图片方法
    一个Notification 进度条插件(android,NJS实现,直接就可使用)
  • 原文地址:https://www.cnblogs.com/liuzc/p/6552587.html
Copyright © 2011-2022 走看看