班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。
給定乙個 n * n 的矩陣 m,表示班級中學生之間的朋友關係。如果m[i][j] = 1,表示已知第 i 個和 j 個學生互為朋友關係,否則為不知道。你必須輸出所有學生中的已知的朋友圈總數。
把尋找島嶼個數**稍稍修改一下即可,只是此時遍歷應該是逐行遍歷,而不是上下左右四個位置了
class
solution
:def
findcirclenum
(self, m: list[list[
int]])
->
int:
grid = m
ifnot grid:
return
0 row =
len(grid)
col =
len(grid[0]
) cnt =
0def
dfs(i, j)
: grid[i]
[j]=
2for y in
range
(col)
: tmp_i = i
tmp_j = y
if grid[tmp_i]
[tmp_j]==1
: grid[tmp_i]
[tmp_j]=2
dfs(tmp_j, tmp_i)
for i in
range
(row)
:for j in
range
(col)
:if grid[i]
[j]==1:
dfs(i, j)
cnt +=
1return cnt
class
solution
:def
findcirclenum
(self, m: list[list[
int]])
->
int:
ifnot m:
return
0 father =
row =
len(m)
colum =
len(m[0]
)for i in
range
(len
(m[0])
):deffind
(x):
if father[x]
!= x:
father[x]
= find(father[x]
)return father[x]
defunion
(i,j)
: father[find(j)
]= find(i)
for i in
range
(row)
:for j in
range
(colum)
:if m[i]
[j]==1:
union(i,j)
for i in
range
(len
(m))
: find(i)
return
len(
set(father)
)
並查集 leetcode朋友圈
班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。給定乙個 n n 的矩陣 m,表示班級中學生之間的朋友關係。如果m i j 1,表示已知第 i 個和 ...
LeetCode 求朋友圈的個數
題目描述 給定乙個二維的0 1矩陣,如果第 i,j 位置是1,則表示第i個人和第j個人是朋友.已知朋友關係是可以 傳遞的,即如果a是b的朋友,b是c的朋友,那麼a和c也是朋友,換言之這三個人處於同乙個朋友圈之內.求 一共有多少個朋友圈.示例 input 1,1,0 1,1,0 0,0,1 outpu...
位元組專題 leetcode 547 朋友圈
547.朋友圈 班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。給定乙個 n n 的矩陣 m,表示班級中學生之間的朋友關係。如果m i j 1,表示已...