Leetcode 1042 不邻接植花 图的简单遍历

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;
	    }
	};

你可能感兴趣的:(算法)