Giả sử chúng ta có một danh sách bạn bè, trong đó friends[i] là danh sách những người mà người i kết bạn. Mối quan hệ bạn bè là hai chiều. Và mỗi người đều tự kết bạn với chính mình, hai người thuộc cùng một nhóm bạn bè miễn là tồn tại một đường đi các bạn chung kết nối họ. Chúng ta cần tìm tổng số nhóm bạn bè.
Ví dụ, nếu đầu vào là friends = [[0, 1, 5],[1, 0],[2],[3, 4],[4, 3],[5, 0]], thì đầu ra sẽ là 3, vì có ba nhóm bạn bè như sau:

Để giải quyết bài toán này, chúng ta thực hiện các bước sau:
nodes:= kích thước của mảngfriendsvisited:= một mảng cùng kích thước vớinodes, khởi tạo tất cả giá trị làFalseans:= 0- Định nghĩa hàm
dfs()nhận tham sốvertexvàvisited:- Đánh dấu
visited[vertex] = True - Với mỗi
neitrongfriends[vertex]:- Nếu
visited[nei]làFalse, gọi đệ quydfs(nei, visited)
- Nếu
- Đánh dấu
- Từ hàm chính, thực hiện:
- Với
itừ 0 đếnnodes - 1:- Nếu
visited[i]làFalse:- Gọi
dfs(i, visited) - Tăng
anslên 1
- Gọi
- Nếu
- Với
- Trả về
ans
Ví dụ triển khai
class Solution:
def solve(self, friends):
nodes = len(friends)
visited = [False for _ in range(nodes)]
ans = 0
def dfs(vertex, visited):
visited[vertex] = True
for nei in friends[vertex]:
if not visited[nei]:
dfs(nei, visited)
for i in range(nodes):
if not visited[i]:
dfs(i, visited)
ans += 1
return ans
ob = Solution()
friends = [[0, 1, 5], [1, 0], [2], [3, 4], [4, 3], [5, 0]]
print(ob.solve(friends))
Đầu vào
[[0, 1, 5], [1, 0], [2], [3, 4], [4, 3], [5, 0]]
Đầu ra
3