leetcode 朋友圈dfs與並查集

2021-10-11 00:07:54 字數 1801 閱讀 9207

班上有 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,表示已...