classSolution: defmaxAreaOfIsland(self, grid: List[List[int]]) -> int: # 深度优先搜索 空间复杂度o(m*n) m, n = len(grid), len(grid[0]) res = 0 defdfs(x, y) -> int: s = 1 grid[x][y] = 0 for i, j in [(x - 1, y), (x, y - 1), (x + 1, y), (x, y + 1)]: if i < 0or j < 0or i == m or j == n or grid[i][j]!=1: continue s += dfs(i, j) return s
for i inrange(m): for j inrange(n): if grid[i][j] == 1: res = max(res, dfs(i, j)) return res
有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向
边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi
是目标节点, wi 是一个信号从源节点传递到目标节点的时间。
现在,从某个节点 K
发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回
-1 。
classSolution: defnetworkDelayTime(self, times: List[List[int]], n: int, k: int) -> int: g = [[] for _ inrange(n)] for x, y, time in times: g[x - 1].append((y - 1, time))
dist = [float('inf')] * n dist[k - 1] = 0 q = [(0, k - 1)] while q: time, x = heapq.heappop(q) if dist[x] < time: continue for y, time in g[x]: if (d := dist[x] + time) < dist[y]: dist[y] = d heapq.heappush(q, (d, y))
ans = max(dist) return ans if ans < float('inf') else -1
存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n -
1 之间的唯一编号。给定一个二维数组 graph ,表示图,其中 graph[u]
是一个节点数组,由节点 u 的邻接节点组成。形式上,对于 graph[u] 中的每个
v ,都存在一条位于节点 u 和节点 v 之间的无向边。
二分图
定义:如果能将一个图的节点集合分割成两个独立的子集 A 和 B
,并使图中的每一条边的两个节点一个来自 A 集合,一个来自 B
集合,就将这个图称为 二分图 。
classSolution: defisBipartite(self, graph: List[List[int]]) -> bool: # 广度优先遍历 [推荐] n = len(graph) uncolor, red, green = 0, 1, 2 color = [0] * n for i inrange(n): if color[i] == uncolor: color[i] = red q = deque([i]) while q: node = q.popleft() nei = green if color[node] == red else red for j in graph[node]: if color[j] == uncolor: color[j] = nei q.append(j) elif color[j] != nei: returnFalse returnTrue defisBipartite(self, graph: List[List[int]]) -> bool: # 深度优先遍历 【不推荐】 defdfs(i: int, c: int): nonlocal res nei = green if c == red else red for j in graph[i]: if color[j] == uncolor: color[j] = nei dfs(j, nei) elif color[j] != nei: res = False
n = len(graph) uncolor, red, green = 0, 1, 2 color = [0] * n res = True for i inrange(n): if color[i] == uncolor and res: dfs(i, red) return res # def isBipartite(self, graph: List[List[int]]) -> bool: # # 并查集 【了解】