题:https://leetcode.com/problems/flower-planting-with-no-adjacent/
题目大意
存在N个花园,给定int[][] paths 为花园的连接关系。每个花园至多只能与其他3个花园连接。
要求为每个花园指定1 - 4 种 颜色,使得相邻花园的颜色不同。
思路
将 paths,转化为 图 表示。
查看每个节点,看起相邻的点已经使用了 4 种颜色的哪种,然后选择一种未使用的颜色给自己涂色。
class Solution {
public int[] gardenNoAdj(int N, int[][] paths) {
List<Integer>[] graph = new List[N+1];
for(int[] path : paths){
if(graph[path[0]] == null)
graph[path[0]] = new LinkedList<Integer>();
graph[path[0]].add(path[1]);
if(graph[path[1]] == null)
graph[path[1]] = new LinkedList<Integer>();
graph[path[1]].add(path[0]);
}
int[] cols = new int[N];
Set<Integer> set = new HashSet();
for(int i = 1 ; i <= N;i++){
if(graph[i] == null || cols[i-1]!=0)
continue;
set.clear();
for(int nNode:graph[i]){
if(cols[nNode-1]!=0)
set.add(cols[nNode-1]);
}
for(int index = 1;index <= 4 && cols[i-1] == 0 ;index++)
if(!set.contains(index)){
cols[i-1] = index;
}
}
for(int i = 0 ; i<N;i++)
if(cols[i] == 0)
cols[i] =1;
return cols;
}
}