File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
src/main/java/com/thealgorithms/graph Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ package com .thealgorithms .graphs ;
2+
3+ import java .util .*;
4+
5+ /**
6+ * 0-1 BFS for shortest paths on graphs with 0/1 edge weights.
7+ *
8+ * <p>Time: O(V + E). Space: O(V).
9+ *
10+ * <p>References:
11+ * <ul>
12+ * <li>https://cp-algorithms.com/graph/01_bfs.html</li>
13+ * </ul>
14+ */
15+ public final class ZeroOneBfs {
16+
17+ private ZeroOneBfs () {
18+ // utility class
19+ }
20+
21+ /**
22+ * Computes shortest distances from {@code src} in a graph with edges weighted 0 or 1.
23+ *
24+ * @param n number of vertices labeled [0..n-1]
25+ * @param edges adjacency list where each entry is (to, weight) with weight ∈ {0,1}
26+ * @param src source vertex
27+ * @return distances array; {@code Integer.MAX_VALUE} if unreachable
28+ */
29+ public static int [] shortestPaths (int n , List <List <int []>> edges , int src ) {
30+ int [] dist = new int [n ];
31+ Arrays .fill (dist , Integer .MAX_VALUE );
32+ Deque <Integer > dq = new ArrayDeque <>();
33+ dist [src ] = 0 ;
34+ dq .addFirst (src );
35+
36+ while (!dq .isEmpty ()) {
37+ int u = dq .pollFirst ();
38+ for (int [] e : edges .get (u )) {
39+ int v = e [0 ], w = e [1 ];
40+ int nd = dist [u ] + w ;
41+ if (nd < dist [v ]) {
42+ dist [v ] = nd ;
43+ if (w == 0 ) {
44+ dq .addFirst (v );
45+ } else {
46+ dq .addLast (v );
47+ }
48+ }
49+ }
50+ }
51+ return dist ;
52+ }
53+ }
You can’t perform that action at this time.
0 commit comments