LeetCode547:省份数量

目录

一、题目

二、示例

三、思路

四、代码


一、题目

n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。

省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

返回矩阵中 省份 的数量

二、示例

示例 1:

输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出:2

示例 2:


输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]]
输出:3

提示:

  • 1 <= n <= 200
  • n == isConnected.length
  • n == isConnected[i].length
  • isConnected[i][j] 为 1 或 0
  • isConnected[i][i] == 1
  • isConnected[i][j] == isConnected[j][i]

三、思路

可以把 n 个城市和它们之间的相连关系看成图城市是图中的节点相连关系是图中的,给定的矩阵 isConnected 即为图的邻接矩阵省份即为图中的连通分量

计算省份总数,等价于计算图中的连通分量数,可以通过深度优先搜索

四、代码

class Solution:
    def findCircleNum(self, isConnected) -> int:
        """
        :param isConnected: List[List[int]]
        :return: int
        """
        n = len(isConnected)
        # 邻接矩阵,图的深度优先遍历算法,计算连通分量的个数,即省份的个数

        visited = [0 for _ in range(n)]  # visited = [0, 0, 0] 表示该点是否遍历

        # 深度优先遍历
        def DFSTraverse(graph):
            """
            :param graph: List[List[int]]
            :return: int
            """
            counts = 0
            for i in range(n):
                if not visited[i]:
                    # print('*' * 10)
                    # print('第{}次深度遍历'.format(counts + 1))
                    DFS(graph, i)
                    counts += 1
            return counts

        # 以下标为i的顶点进行遍历,进行一次深度优先递归,对于连通图,可以访问到所有的顶点
        def DFS(graph, i):
            visited[i] = 1
            # print(i + 1)
            for j in range(n):
                if graph[i][j] == 1 and not visited[j]:
                    DFS(graph, j)

        res = DFSTraverse(isConnected)
        return res

if __name__ == '__main__':
    isConnected = [
                    [1, 1, 0],
                    [1, 1, 0],
                    [0, 0, 1]
                  ]
    s = Solution()
    ans = s.findCircleNum(isConnected)
    print(ans)

猜你喜欢

转载自blog.csdn.net/weixin_45666660/article/details/112303567