116 省份数量【python3】

该代码实现了一个利用深度优先搜索(DFS)算法来计算给定城市连接情况下的省份数量,包括孤立城市。首先,计算孤立城市数量,然后通过DFS遍历连接的城市并标记,最后返回省份总数(孤立城市数+连通组件数)。

代码-DFS

思路同200题岛屿数量

本题通过判断是否还有和城市i相连的城市没有遍历,来进行深度优先遍历并且计数。
并且在进行深度优先遍历之前,要计算出孤立城市(一个城市就是一个省份)的数量。
最后返回两者之和

class Solution:
    def findCircleNum(self, isConnected: List[List[int]]) -> int:
        n=len(isConnected) # 城市数量
        province=0
        # 判断孤立城市数量
        alone=0
        for i in range(n):
            if isConnected[i].count(1)==1:
                alone+=1

        # 找到与城市i相连的所有城市
        def DFS(i):
            for j in range(n):
                if i!=j and isConnected[i][j]==1:
                    isConnected[i][j]=2
                    isConnected[j][i]=2 # 更新数值为2防止重复遍历
                    DFS(j)
            return 'finish'

        for i in range(n):
            # 如果当前城市还有相连的城市,则进行深度遍历
            if isConnected[i].count(1)>1:
                DFS(i)
                province+=1

        return province+alone

孤立城市的判断放在最后也是一样的

 for i in range(n):
            # 如果当前城市还有相连的城市,则进行深度遍历
            if isConnected[i].count(1)>1:
                DFS(i)
                province+=1
            if isConnected[i].count(1)==1 and isConnected[i].count(2)==0:
                province+=1

        return province
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值