---
title: 547. Number of Provinces
tags: leetcode,解題報告
---
{%hackmd @hlc23/dark-theme %}
# 547. Number of Provinces
題目連結: [Leetcode](https://leetcode.com/problems/number-of-provinces/description/)
## 題目概要
圖論題
給$n\times n$的陣列表各節點的相連情形
找出森林中樹的數量
## 想法
歷遍所有樹(DFS、BFS)
## 參考解法
歡迎補充
:::spoiler Python DFS解
```python=
class Solution:
def dfs(self, node: int) -> None:
self.visted[node] = True
for i, status in enumerate(self.table[node]):
if (status == 1 and self.visted[i] is False):
self.dfs(i)
def findCircleNum(self, isConnected: List[List[int]]) -> int:
self.n = len(isConnected)
self.visted = [False for _ in range(len(isConnected))]
self.table = isConnected
ans = 0
for i in range(self.n):
if self.visted[i] is True:
continue
ans += 1
self.dfs(i)
return ans
```
:::
:::spoiler CPP DFS 解
```cpp=
class Solution {
public:
int n;
vector<bool> visted;
void dfs(int node, vector<vector<int>> &table){
visted[node] = true;
for (int i=0; i<n; i++){
if (!visted[i] and table[node][i] == 1) dfs(i, table);
}
}
int findCircleNum(vector<vector<int>>& isConnected) {
n = isConnected.size();
visted.resize(n, false);
int ans = 0;
for (int i=0; i<n; i++){
if (!visted[i]){
ans += 1;
dfs(i, isConnected);
}
}
return ans;
}
};
```
:::