省份數量 深度優先搜尋 廣度優先搜尋 並查集解法

2021-10-21 16:42:47 字數 1680 閱讀 5168

547. 省份數量

n個城市,其中一些彼此相連,另一些沒有相連。如果城市a與城市b直接相連,且城市b與城市c直接相連,那麼城市a與城市c間接相連。

省份是一組直接或間接相連的城市,組內不含其他沒有相連的城市。

給你乙個n x n的矩陣isconnected,其中isconnected[i][j] = 1表示第i個城市和第j個城市直接相連,而isconnected[i][j] = 0表示二者不直接相連。

返回矩陣中省份的數量。

示例 1:

輸入:isconnected = [[1,1,0],[1,1,0],[0,0,1]]

輸出:2

示例 2:

輸入:isconnected = [[1,0,0],[0,1,0],[0,0,1]]

輸出:3

1 <= n <= 200

n == isconnected.length

n == isconnected[i].length

isconnected[i][j] 為 1 或 0

isconnected[i][i] == 1

isconnected[i][j] == isconnected[j][i]

class solution 

// return i;

// }

// void lian(vector&gen,int i,int j)

// else gen[i] = j;

// }

};

class solution(object):

def findcirclenum(self, isconnected):

""":type isconnected: list[list[int]]

:rtype: int

"""# 廣度優先搜尋

province = len(isconnected)

visit = [false for i in range(province)]

# print(visit)

que =

count =0

# count 記錄城市群的個數

for i in range(province):

# 如果該城市沒有訪問

if visit[i]==false:

# 把該城市加入到列表中

while len(que)!=0:

# 訪問該城市,並把該城市從列表中刪除

tempi = que.pop()

visit[tempi]= true

for j in range(province):

# 把與當前訪問並且連通的城市加入到佇列中,且此城市還沒有被訪問

if isconnected[tempi][j]==1 and visit[j]==false:

count+=1

return count

深度優先遍歷 遞迴 深度優先搜尋和廣度優先搜尋

對於搜尋來說,我們絕大多數情況下處理的都是叫 所謂的暴力搜尋 或者是說比較簡單樸素的搜尋,也就是說你在搜尋的時候沒有任何所謂的智慧型的情況在裡面考慮,很多情況下它做的一件事情就是把所有的結點全部遍歷一次,然後找到你要的結果。基於這樣的乙個資料結構,如果這個資料結構本身是沒有任何特點的,也就是說是乙個...

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...