|
| 1 | +# 可能的二分法 |
| 2 | + |
| 3 | +> 难度:中等 |
| 4 | +> |
| 5 | +> https://leetcode.cn/problems/possible-bipartition/ |
| 6 | +
|
| 7 | +## 题目 |
| 8 | + |
| 9 | +给定一组 `n` 人(编号为 1, 2, ..., n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。 |
| 10 | + |
| 11 | +给定整数 `n` 和数组 `dislikes` ,其中 `dislikes[i] = [ai, bi]` ,表示不允许将编号为 `ai` 和 `bi`的人归入同一组。当可以用这种方法将所有人分进两组时,返回 `true`;否则返回 `false`。 |
| 12 | + |
| 13 | +### 示例 |
| 14 | + |
| 15 | +#### 示例 1: |
| 16 | + |
| 17 | +``` |
| 18 | +输入:n = 4, dislikes = [[1,2],[1,3],[2,4]] |
| 19 | +输出:true |
| 20 | +解释:group1 [1,4], group2 [2,3] |
| 21 | +``` |
| 22 | + |
| 23 | +#### 示例 2: |
| 24 | + |
| 25 | +``` |
| 26 | +输入:n = 3, dislikes = [[1,2],[1,3],[2,3]] |
| 27 | +输出:false |
| 28 | +``` |
| 29 | + |
| 30 | +#### 示例 3: |
| 31 | + |
| 32 | +``` |
| 33 | +输入:n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]] |
| 34 | +输出:false |
| 35 | +``` |
| 36 | + |
| 37 | +## 解题 |
| 38 | + |
| 39 | +```ts |
| 40 | +/** |
| 41 | + * 深度优先搜索 |
| 42 | + * @desc 时间复杂度 O(N+M) 空间复杂度 O(N+M) |
| 43 | + * @param n |
| 44 | + * @param dislikes |
| 45 | + * @returns |
| 46 | + */ |
| 47 | +export function possibleBipartition(n: number, dislikes: number[][]): boolean { |
| 48 | + const color = new Array<number>(n + 1).fill(0) |
| 49 | + const g: number[][] = new Array(n + 1).fill([]).map(() => []) |
| 50 | + |
| 51 | + for (const p of dislikes) { |
| 52 | + g[p[0]].push(p[1]) |
| 53 | + g[p[1]].push(p[0]) |
| 54 | + } |
| 55 | + for (let i = 1; i <= n; ++i) { |
| 56 | + if (color[i] === 0 && !dfs(i, 1)) |
| 57 | + return false |
| 58 | + } |
| 59 | + return true |
| 60 | + |
| 61 | + function dfs(curnode: number, nowcolor: number) { |
| 62 | + color[curnode] = nowcolor |
| 63 | + for (const nextnode of g[curnode]) { |
| 64 | + if (color[nextnode] !== 0 && color[nextnode] === color[curnode]) |
| 65 | + return false |
| 66 | + |
| 67 | + if (color[nextnode] === 0 && !dfs(nextnode, 3 ^ nowcolor)) |
| 68 | + return false |
| 69 | + } |
| 70 | + return true |
| 71 | + } |
| 72 | +} |
| 73 | +``` |
0 commit comments