m372. 3. 搬家 === https://zerojudge.tw/ShowProblem?problemid=m372 > graph的第i個位置的幾個元素就是他連接的有幾個管子以及連接管子的位置,dfs就是往管子的某個方向一直去遞迴 ```python= mask = { 'X': [1, 1, 1, 1], 'I': [1, 0, 1, 0], 'H': [0, 1, 0, 1], 'L': [1, 1, 0, 0], '7': [0, 0, 1, 1], 'F': [0, 1, 1, 0], 'J': [1, 0, 0, 1], '0': [0, 0, 0, 0] } # DFS函數,計算連通塊大小 def dfs(node): global cur cur += 1 vis[node] = True for u in graph[node] if not vis[u]: vis[u] = True dfs(u) graph = [[] for _ in range(500000)] vis = [False] * 500000 ans = 0 n, m = map(int, input().split()) v = [input() for _ in range(n)] for i in range(n): for j in range(m): if i + 1 < n and mask[v[i][j]][2] and mask[v[i + 1][j]][0]: graph[i * m + j].append((i + 1) * m + j)#上下方向都是1相通 graph[(i + 1) * m + j].append(i * m + j) if j + 1 < m and mask[v[i][j]][1] and mask[v[i][j + 1]][3]: graph[i * m + j].append(i * m + j + 1) #左右方向都是1相通 graph[i * m + j + 1].append(i * m + j) # 對每個節點進行DFS for i in range(n): for j in range(m): cur = 0 dfs(i * m + j) ans = max(ans, cur) print(ans) ```