Leetcode 1042 不邻接植花 图的简单遍历
题意
N个花园构成一个无向图,编号从1到N,任何路径相连的两个花园的花的种类是不一样的,花的种类用1~4表示,保证有答案。
分析
方法其实很简单粗暴,遍历每一个节点,与这个节点相邻的节点的花色都不能要,筛选过后取从1~4中最小的那个花色。这里方便起见就用vector存图。其实边比较密集的话时间复杂度会达到O(nm), 不过leetcode这里好像没有卡
代码
class Solution {
public:
vector<int> gardenNoAdj(int N, vector<vector<int>>& paths) {
//一开始每个点的color都设置成0
vector<int> color(N,0);
vector<int> graph[N+1];
for(int i=0;i<paths.size();++i){
//建立无向图
graph[paths[i][0]].push_back(paths[i][1]);
graph[paths[i][1]].push_back(paths[i][0]);
}
for(int i=1;i<=N;++i){
//这里用set的话会很方便
set<int> s{1,2,3,4};
for(int j = 0;j<graph[i].size();++j){
s.erase(color[graph[i][j] - 1]);
//把相邻节点的颜色删去
}
color[i-1]=*s.begin();//取第一个颜色
}
return color;
}
};