这个题相较于LC200更难一点,给的矩阵说的是两个城市是否相连,可以是直接相连也可以是间接相连。
class Solution(object):
def findCircleNum(self, isConnected):
"""
:type isConnected: List[List[int]]
:rtype: int
"""
# 1.DFS
row = len(isConnected)
visited = [0 for i in range(row)]
result = 0
for i in range(row):
if not visited[i]:
self.dfs(i, row, visited, isConnected)
result += 1
return result
def dfs(self, i, row, visited, isConnected):
for j in range(row):
if isConnected[i][j] == 1 and not visited[j]:
visited[j] = 1
self.dfs(j, row, visited, isConnected)
class Solution(object):
def findCircleNum(self, isConnected):
"""
:type isConnected: List[List[int]]
:rtype: int
"""
# 2.BFS
row = len(isConnected)
visited = set()
result = 0
for i in range(row):
if i not in visited:
queue = collections.deque([i])
while queue:
j = queue.popleft()
visited.add(j)
for k in range(row):
if isConnected[j][k] == 1 and k not in visited:
queue.append(k)
result += 1
return result
class Solution(object):
def findCircleNum(self, isConnected):
"""
:type isConnected: List[List[int]]
:rtype: int
"""
# 3.并查集
row = len(isConnected)
result = 0
parent = [i for i in range(row)]
for i in range(row):
for j in range(row):
if isConnected[i][j] == 1:
self.union(i, j ,parent)
result = sum(parent[i] == i for i in range(row))
return result
def find(self, i, parent):
if parent[i] != i:
parent[i] = self.find(parent[i], parent)
return parent[i]
def union(self, i, j, parent):
parent[self.find(i, parent)] = self.find(j, parent)