相同含义的对象使用数组
暴力写法
List<Integer>[] redGraph = new List[n];
List<Integer>[] blueGraph = new List[n];
for (int i = 0; i < n; i++) {
redGraph[i] = new ArrayList<>();
blueGraph[i] = new ArrayList<>();
}
优雅写法
redGraph和blueGraph的作用完全相同,看作是数组的两个元素
// 错误写法, 这里只会new一次, 所以每个元素共用一个List,
List<Integer>[][] graphs = new List[2][n];
for (List[] graph : graphs) {
Arrays.fill(graph, new ArrayList<>());
}
List<Integer>[][] graphs = new List[2][n];
for (List[] graph : graphs) {
Arrays.setAll(graph, k->new ArrayList<>());
}
队列中使用int[]等数组类型作为泛型
图遍历防止重复访问:需要在发现节点后立即进行标记。不能在等待真正处理该节点的时候才标记。