1. 寻找图中是否存在路径(LeetCode 1971)
有一个具有 n 个顶点的双向图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。
图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。
每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。
请你确定是否存在从顶点source
开始,到顶点destination
结束的有效路径
。
如果存在有效路径返回 true,否则返回 false 。
class Solution:
def validPath(self, n: int, edges: List[List[int]], source: int, destination: int) -> bool:
global father
father = []
# 初始化并查集
def init(n: int):
global father
father = [i for i in range(n)]
# 寻找本联通分量的根
def find(node1: int):
global father
if node1 == father[node1]:
return node1
else:
# 路径压缩
father[node1] = find(father[node1])
return father[node1]
# 添加边 node1--node2
def join(node1, node2):
global father
node1 = find(node1)
node2 = find(node2)
if node1 == node2:
return
else:
father[node2] = node1
init(n)
for x, y in edges:
join(x, y)
return find(source) == find(destination)
标签:int,查集,father,算法,node1,顶点,node2,find
From: https://www.cnblogs.com/hifrank/p/18517499