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;
	    }
	};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值