class Solution:
def findCircleNum(self, isConnected: List[List[int]]) -> int:
n = len(isConnected)
visited =set() # 使用列表可以减小一点开销
cnt =0
def dfs(pos):
for i in range(n): # 对该城市搜索所有相邻城市
if isConnected[pos][i] and i not in visited :
visited.add(i)
dfs(i)
for i in range(n): # 开始遍历所有城市
if i not in visited: # 开始时也会加一个判断是否访问过
dfs(i) # 如果没有访问则进行深度优先搜索,将其相邻城市标记为访问
cnt+=1
return cnt
Warshall 算法通过求可达矩阵,对上三角进行遍历
class Solution:
def findCircleNum(self, isConnected: List[List[int]]) -> int:
n = len(isConnected)
for j in range(n):
for i in range(n):
if isConnected[i][j]==1:
for k in range(n):
isConnected[i][k]|= isConnected[j][k]
cnt=0
for i in range(n):
flag =0
if isConnected[i][i]==0:continue
for j in range(i,n):
if isConnected[i][j]==1:
isConnected[j][j]=0
if not flag:
cnt+=1
flag=1
return cnt