1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class Solution { public boolean isBipartite(int[][] graph) { Boolean[] flag = new Boolean[graph.length]; boolean[] visited = new boolean[graph.length]; int visiting = 0; flag[0] = true; Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < graph.length; i++) { for (int j = 0; j < graph[visiting].length; j++) { if (flag[graph[visiting][j]] == null) { flag[graph[visiting][j]] = !flag[visiting]; } else if (flag[graph[visiting][j]] == flag[visiting]) { return false; } if (!visited[graph[visiting][j]] && !queue.contains(graph[visiting][j])) { queue.add(graph[visiting][j]); } } visited[visiting] = true;
if (!queue.isEmpty()) { visiting = queue.poll(); } else { for (int j = 0; j < visited.length; j++) { if (!visited[j]) { visiting = j; flag[visiting] = true; break; } } } } return true; } }
|