LeetCode 886 可能的二分法[dfs] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 886 可能的二分法[dfs] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路
首先用一个二维数组存储每个人不喜欢的人的列表,定义一个存储分组类型的n+1维数组,用来标记每个人分到的组序号(1或者2,0代表未分组),从第一个人开始遍历,遇到未分组的不喜欢的人继续遍历,不断dfs,中间根据是否分组、分组后是否有冲突进行判断,注释已经很详尽了,代码如下:
代码
class Solution
public:
// 存储分组类型
vector<int> color;
// 存储不喜欢人列表
vector<vector<int>> count;
bool possibleBipartition(int n, vector<vector<int>>& dislikes)
color = vector<int>(n + 1, 0);
count = vector<vector<int>>(n + 1);
// 用二维数组存储每个人不喜欢的人的列表
for(auto& dislike : dislikes)
count[dislike[0]].push_back(dislike[1]);
count[dislike[1]].push_back(dislike[0]);
// 遍历每个人
for(int i = 1; i <= n; i ++)
// 如果没分组且分组后有冲突
if(color[i] == 0 && !dfs(i, 1))
return false;
return true;
bool dfs(int cur, int cur_color)
// 分组
color[cur] = cur_color;
// 遍历不喜欢人列表
for(auto& node : count[cur])
// 如果分组并且和当前不喜欢的人在一组,冲突
if(color[node] && color[node] == cur_color)
return false;
// 如果未分组且分组后有冲突
if(!color[node] && !dfs(node, 3 ^ cur_color))
return false;
return true;
;
以上是关于LeetCode 886 可能的二分法[dfs] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章