https://leetcode.com/problems/is-graph-bipartite/description/
题目大意:问无向图能否分成两部分,使得两部分的点互相不是直接相连的。
解题思路:从一个点出发染色即可,注意考虑存在多张图的情况。
class Solution { public boolean isBipartite(int[][] g) { int n = g.length; int[] vis = new int[n]; Queue<Integer> qt = new LinkedList<>(); for(int j=0;j<n;j++) { if(vis[j]!=0) continue; if(vis[j]==0) { vis[j]=1; qt.offer(j); } while (!qt.isEmpty()) { int t = qt.poll(); // System.out.println(t); for (int i = 0; i < g[t].length; i++) { int tmp = g[t][i]; // System.out.println(tmp); if (vis[tmp] == 0) { vis[tmp] = vis[t] * -1; qt.offer(tmp); continue; } if (vis[t] == vis[tmp] * -1) continue; else return false; } } } return true; } }