題意:
本題題意爲:
尋找一個花園的塗色方案,要求
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; }