https://leetcode.com/problems/is-graph-bipartite/
有点像简化版的地图着色问题。
每走一步,颜色翻转一下,并且染色。
当遇到已经染过色的节点时,
DFS完成之后,返回 true。
另外,由于本题不保证是连通图,所以对于非连通图来说,可以将两个连通分量独立考察。
详见草稿:
class Solution {
int N;
public boolean isBipartite(int[][] graph) {
N = graph.length;
int[] color = new int[N];
for (int i = 0; i < N; i++) { // 不保证是连通图
if (color[i] == 0 && !dfs(graph, color, i, 1)) return false;
}
return true;
}
public boolean dfs(int[][] graph, int[] color, int i, int flag) {
if (color[i] == 0) { // 未上色
color[i] = flag;
for (int j : graph[i]) {
if (!dfs(graph, color, j, -flag)) return false;
}
return true;
} else { // 已上色
return color[i] == flag;
}
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/sinat_42483341/article/details/121885615
内容来源于网络,如有侵权,请联系作者删除!