染色问题
class Solution {
public:
vector<int> gardenNoAdj(int N, vector<vector<int>>& paths) {
vector<int> res(N+1, 0);//全部初始化为0
vector<vector<int>> g(N+1);//邻接表
for(const auto &path : paths){
//无向图两头都要存储
g[path[0]].push_back(path[1]);
g[path[1]].push_back(path[0]);
}
for(int i = 1; i <= N; ++i){//开始种花,从第一个花园开始
set<int> color = {1,2,3,4};
for(int j = 0; j < g[i].size(); ++j){
color.erase(res[g[i][j]]);//遍历当前顶点的所有相邻节点,从可用颜色中移除相邻节点的颜色
}
res[i] = *(color.begin());//染色,直接取第一个
}
return vector<int>(res.begin()+1, res.end());
}
};