summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorHaidong Ji2020-07-19 21:31:22 -0500
committerHaidong Ji2020-07-19 21:31:22 -0500
commit3929c18515bc46cae10c0e2d66c0c622591eee96 (patch)
tree92d47ad0a22bb58a08f2ae8d03bf8c8745408f30 /src/main
parentd4da45aaeb3799ca813819086c53790e6cb3527d (diff)
Bipartite check done! One of the problems with my code was I ran bfs for all vertex, whereas checking just one is enough! Happy I got it done!
Diffstat (limited to 'src/main')
-rw-r--r--src/main/Bipartite.java63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/main/Bipartite.java b/src/main/Bipartite.java
new file mode 100644
index 0000000..d5d72b9
--- /dev/null
+++ b/src/main/Bipartite.java
@@ -0,0 +1,63 @@
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.Scanner;
+
+public class Bipartite {
+ private static int bipartite(ArrayList<Integer>[] adj) {
+
+ boolean bipartiteCheckNodes = bfsBipartiteCheck(adj, 0);
+ if (bipartiteCheckNodes)
+ return 1;
+ else
+ return 0;
+ }
+
+ private static boolean bfsBipartiteCheck(ArrayList<Integer>[] adj, int s) {
+ if (adj[s].size() == 0)
+ return true;
+ int[] dist = new int[adj.length];
+
+ Arrays.fill(dist, -1);
+
+ dist[s] = 0;
+
+ Queue<Integer> vertexQ = new LinkedList<>();
+ vertexQ.add(s);
+
+ while (!vertexQ.isEmpty()) {
+ int u = vertexQ.remove();
+ for (int i : adj[u])
+ if (dist[i] == -1) {
+ vertexQ.add(i);
+ if (dist[u] == 0)
+ dist[i] = 1;
+ if (dist[u] == 1)
+ dist[i] = 0;
+ } else if (dist[i] == dist[u]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static void main(String[] args) {
+ Scanner scanner = new Scanner(System.in);
+ int n = scanner.nextInt();
+ int m = scanner.nextInt();
+ ArrayList<Integer>[] adj = (ArrayList<Integer>[]) new ArrayList[n];
+ for (int i = 0; i < n; i++) {
+ adj[i] = new ArrayList<Integer>();
+ }
+ for (int i = 0; i < m; i++) {
+ int x, y;
+ x = scanner.nextInt();
+ y = scanner.nextInt();
+ adj[x - 1].add(y - 1);
+ adj[y - 1].add(x - 1);
+ }
+ System.out.println(bipartite(adj));
+ }
+}
+