由于每个点最多有三条路径,因此用四种颜色,可以将所有顶点进行染色。因此顺序遍历进行染色,如果邻居有相同颜色,就将这种颜色从集合里面删除。最后从可选集合里选择一种颜色进行染色。
class Solution {
public:
vector<int> gardenNoAdj(int n, vector<vector<int>>& paths) {
vector<vector<int>> graph(n);
vector<int> res(n, 0);
for (auto path : paths) {
int a = path[0] - 1, b = path[1] - 1;
graph[a].emplace_back(b);
graph[b].emplace_back(a);
}
for (int i = 0; i < n; i++) {
set<int> color{1,2,3,4};
for (auto v : graph[i]) {
color.erase(res[v]);
}
res[i] = *(color.begin());
}
return res;
}
};