leetcode 785. Is Graph Bipartite? | 785. 判断二分图(DFS,地图着色)

x33g5p2x  于2021-12-12 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(294)

题目

https://leetcode.com/problems/is-graph-bipartite/

题解

有点像简化版的地图着色问题。

每走一步,颜色翻转一下,并且染色。

当遇到已经染过色的节点时,

  • 如果颜色正确,则停止此路径
  • 如果颜色错误,则返回 false

DFS完成之后,返回 true。

另外,由于本题不保证是连通图,所以对于非连通图来说,可以将两个连通分量独立考察。

详见草稿:

  1. class Solution {
  2. int N;
  3. public boolean isBipartite(int[][] graph) {
  4. N = graph.length;
  5. int[] color = new int[N];
  6. for (int i = 0; i < N; i++) { // 不保证是连通图
  7. if (color[i] == 0 && !dfs(graph, color, i, 1)) return false;
  8. }
  9. return true;
  10. }
  11. public boolean dfs(int[][] graph, int[] color, int i, int flag) {
  12. if (color[i] == 0) { // 未上色
  13. color[i] = flag;
  14. for (int j : graph[i]) {
  15. if (!dfs(graph, color, j, -flag)) return false;
  16. }
  17. return true;
  18. } else { // 已上色
  19. return color[i] == flag;
  20. }
  21. }
  22. }

相关文章