递归函数理解

    //递归需要关注,每次递归达到的目的,包括影响了哪些全局值,或者改变什么全局状态;

    //另外是输入条件和边界结束条件,输入条件保证递归的输入环境是否一致;

                                                         //结束条件,表明什么时候结束,避免无限递归。

    //最后是递归在函数中的位置,递归在函数开始,中间,末尾

    //递归函数在函数中不同的位置,影响点:1.函数前面部分对递归输入环境的影响;2.其递归的全局结果对函数其他部分的影响。

                                                                     //3.递归结果会影响到递归的输入环境吗?可能会影响一些全局的状态;

LeetCode 547 

https://leetcode-cn.com/problems/number-of-provinces/

解答:

    int findCircleNum(vector<vector<int>>& isConnected) {

        int numCircles = 0;

        if(isConnected.empty()){

            return numCircles;

        }

        int numCity = isConnected[0].size();

        vector<bool> flag(numCity,false);//标志城市是否被找过

        for(int i=0;i<numCity;i++){

            if(!flag[i]){

                flag[i]=true;

                findCircleFromPoint(i,isConnected,flag);

                numCircles++;

            }

        }

        return numCircles;

    }

    //找到与i城市相连的所有城市

    void findCircleFromPoint(int i, vector<vector<int>>& isConnected, vector<bool>& flag){

        int numCity = isConnected[0].size();

        if(i>=numCity || i<0){

            return;

        }

        for(int j=0;j<numCity;j++){

            if(j!=i && isConnected[i][j]){

                flag[j]=true;

                //i和j相邻

                isConnected[i][j] = 0;

                //避免重复搜到i

                isConnected[j][i] = 0;

                findCircleFromPoint(j,isConnected,flag);

            }

        }

    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值