Leetcode 323. 无向图中连通分量的数目
本文最后更新于385 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

你有一个包含 n 个节点的图。给定一个整数 n 和一个数组 edges ,其中 edges[i] = [ai, bi] 表示图中 ai 和 bi 之间有一条边。

返回 图中已连接分量的数目 。

1.2.题目地址

https://leetcode.cn/problems/number-of-connected-components-in-an-undirected-graph/description/

2.解题方法

2.1.解题思路

并查集/DFS

2.2.解题步骤

并查算法步骤

  • 第一步,构建维护变量。使用rootDict记录各个节点归属的集合的根节点。

  • 第二步,构建并查集中用于寻找到节点x所在集合的根节点的函数

  • 第三步,遍历所有的边,根据并查集求联通分量个数

DFS算法步骤

  • 第一步,使用邻接表构建无向图

  • 第二步,构建维护变量。使用visited记录已经遍历过的点

  • 第三步,通过DFS计算连通分量的个数

3.解题代码

并查集版本代码

class Solution:
    # 并查算法
    def countComponents(self, n: int, edges: List[List[int]]) -> int:
        # 记录几点i所在集合的根节点,下面的集合表示root相同的节点构成的集合
        self.rootDict={i:i for i in range(n)}
        # 找到节点x所在集合的根节点
        def findRoot(x):
            # 根节点为本身的就是根节点
            root=self.rootDict[x]
            while root!=self.rootDict[root]:
                root=self.rootDict[root]
            return root
        cnt=n
        for edge in edges:
            root1=findRoot(edge[0])
            root2=findRoot(edge[1])
            if root1!=root2:
                # 说明需要两个的点不在同一集合上
                cnt-=1
                # 更新后面节点的根节点
                self.rootDict[root2]=root1
        return cnt

DFS版本代码

class Solution:
    # DFS
    def countComponents1(self, n: int, edges: List[List[int]]) -> int:
        # 构建图
        graph={i:[] for i in range(n)}
        for edge in edges:
            graph[edge[0]].append(edge[1])
            graph[edge[1]].append(edge[0])
        def dfs(node):
            self.visited.add(node)
            for subNode in graph[node]:
                if subNode not in self.visited:
                    dfs(subNode)
        # 已经遍历过的点
        self.visited=set()
        # 连通分量的个数
        cnt=0
        for node in list(graph.keys()):
            if node not in self.visited:
                dfs(node)
                cnt+=1
        return cnt

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇