题意:
本题题意为:
寻找一个花园的涂色方案,要求
1.花园和花园之间,不能有路径链接的,不能涂成相同颜色的
一共有4中颜色,花园和花园之间,至多有三条路径java
我菜了 - - ,又没作出来。。
看答案数组
使用贪心:
idea: 对每个花园依次进行染色时,一定能够直接染色,由于相临接的最多最多就是三个,一共4中颜色,因此必定能够直接染色了ide
具体想法:
每次对节点染色时,新建一个colors数组,colors[j] , 表明节点i旁边临接的节点赋值的颜色是否有,若是有,就赋值为1 而后遍历,colors,给节点i进行染色idea
代码以下:code
public int[] gardenNoAdj(int N, int[][] paths) { Map<Integer, Set<Integer>> G = new HashMap<>(); for (int i = 0; i < N; i ++) G.put(i, new HashSet<>()); for (int[] p: paths){ G.get(p[0] - 1).add(p[1] - 1); G.get(p[1] - 1).add(p[0] - 1); } int[] res = new int[N]; for (int i = 0; i < N ; i++){ int[] colors = new int[5]; for (int j : G.get(i)) colors[res[j]] = 1; for (int c = 4; c > 0; --c) if (colors[c] == 0) res[i] = c; } return res; }