LeetCode547:朋友圈的深度優先解法
題設
班上有 N 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那麼我們可以認為 A 也是 C 的朋友。所謂的朋友圈,是指所有朋友的集合。
給定一個 N * N 的矩陣 M,表示班級中學生之間的朋友關係。如果M[i][j] = 1,表示已知第 i 個和 j 個學生互為朋友關係,否則為不知道。你必須輸出所有學生中的已知的朋友圈總數。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/friend-circles
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思路
逐行遍歷,每一行內部進行深度搜尋(dfs),把遍歷到的內容方法visited集合中,如果逐行遍歷的過程中遍歷到的元素已經visited過了的話,就不需要再深挖了。如果逐行遍歷過程中遇到的元素是沒有visited過的,則恭喜你,找了一個新的朋友圈。
程式碼
class Solution(object):
def findCircleNum(self, M):
"""
:type M: List[List[int]]
:rtype: int
"""
#DFS的三個代表:N,V,R
N,visited,res = len(M), set(), 0
#DFS深度優先搜尋,本質上就是遍歷圖,然後把圖中的元素依次放入visited集合中
def dfs(i):
for j in range(N):
if M[i][j] == True and j not in visited:
visited.add(j)
dfs(j)
#接下來遍歷每一行尋找朋友圈個數,如果這一行的元素沒有被visited,那麼繼續深搜,count++
count = 0
for i in range(N):
if i not in visited:
count += 1
visited.add(i)
dfs(i)
return count
結果
相關文章
- 大資料下的統計學:問題優先而非解法優先大資料
- ybtoj:深度優先搜尋
- 二叉樹的深度優先遍歷和廣度優先遍歷二叉樹
- js實現深度優先遍歷和廣度優先遍歷JS
- 工作安排(dfs深度優先搜尋)
- 深度優先遍歷,廣度優先遍歷實現物件的深拷貝物件
- 圖的廣度優先搜尋和深度優先搜尋Python實現Python
- python資料結構之圖深度優先和廣度優先Python資料結構
- 【演算法】深度優先搜尋(DFS)演算法
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 深度和廣度優先搜尋演算法演算法
- leetcode 刷題之深度優先搜尋LeetCode
- 深度優先搜尋演算法-dfs講解演算法
- 《圖論》——深度優先搜尋演算法(DFS)圖論演算法
- 【知識點】深度優先搜尋 Depth First Search
- 深度優先搜尋演算法(DFS)講解演算法
- 【PTA】鄰接矩陣儲存圖的深度優先遍歷矩陣
- 圖的深度優先遍歷[非堆疊、堆疊實現]
- python實現圖(基於圖的不同儲存方式)的深度優先(DFS)和廣度(BFS)優先遍歷Python
- 深度優先搜尋(DFS)思路及演算法分析演算法
- 圖論系列之「深度優先遍歷及聯通分量」圖論
- 用python深度優先遍歷解迷宮問題Python
- Node中的兩種遍歷方式-深度優先和廣度優先(附Node刪除檔案例子進行詳解)
- python 實現二叉樹的深度&&廣度優先遍歷Python二叉樹
- 小白的深度優先搜尋(Depth First Search)學習日記(Python)Python
- 再來一篇深度優先遍歷/搜尋總結?
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 學習資料結構 - 深度優先搜尋 DFS 記錄資料結構
- 圖的深度優先遍歷(堆疊實現和非堆疊實現)
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- Swift 演算法實戰之路:深度和廣度優先搜尋Swift演算法
- 圖論系列之「基於深度優先遍歷的尋路演算法 (Path) 」圖論演算法
- 寫不出來的深度優先搜尋----leetcode113 路徑總和LeetCode
- 二分搜尋樹系列之[ 深度優先-層序遍歷 (ergodic) ]Go
- 二分搜尋樹系列之「深度優先-層序遍歷 (ergodic) 」Go
- 【leetcode】劍指 Offer II 105. 島嶼的最大面積-【深度優先DFS】LeetCode
- 幾數之和分析,解法,優化和總結優化