Skip to content

Commit 994043f

Browse files
committed
Algorithms Added
1 parent dbe6856 commit 994043f

File tree

5 files changed

+275
-0
lines changed

5 files changed

+275
-0
lines changed

Algorithms/Algorithms.iml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
7+
</content>
8+
<orderEntry type="inheritedJdk" />
9+
<orderEntry type="sourceFolder" forTests="false" />
10+
</component>
11+
</module>

Algorithms/src/BfsAlgorithm.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.*;
2+
3+
class BfsAlgorithm {
4+
public static void main(String[] args) {
5+
int n = 15;
6+
List<Edge> nodes = Arrays.asList(new Edge(1, 2), new Edge(1, 3), new Edge(1, 4), new Edge(2, 5), new Edge(2, 6), new Edge(4, 7), new Edge(4, 8), new Edge(5, 9), new Edge(5, 10), new Edge(7, 12), new Edge(7, 12));
7+
Graph graph = new Graph(nodes, n);
8+
boolean[] visitors = new boolean[n];
9+
Queue<Integer> q = new ArrayDeque<>();
10+
for (int i = 0; i < n; i++) {
11+
if (!visitors[i]) {
12+
visitors[i] = true;
13+
q.add(i);
14+
bfsImplementation(graph, q, visitors);
15+
}
16+
}
17+
}
18+
19+
private static void bfsImplementation(Graph graph, Queue<Integer> q, boolean[] visitors) {
20+
if (q.isEmpty()) return;
21+
int nodeIndex = q.poll();
22+
System.out.print(nodeIndex + " ");
23+
for (int node : graph.adjList.get(nodeIndex)) {
24+
if (!visitors[node]) {
25+
visitors[node] = true;
26+
q.add(node);
27+
}
28+
}
29+
bfsImplementation(graph, q, visitors);
30+
}
31+
}
32+
33+
class Edge {
34+
int src, dest;
35+
36+
public Edge(int src, int dest) {
37+
this.src = src;
38+
this.dest = dest;
39+
}
40+
}
41+
42+
class Graph {
43+
List<List<Integer>> adjList;
44+
45+
public Graph(List<Edge> nodes, int n) {
46+
this.adjList = new ArrayList<>();
47+
for (int i = 0; i < n; i++) {
48+
adjList.add(new ArrayList<>());
49+
}
50+
for (Edge node : nodes) {
51+
int src = node.src;
52+
int dest = node.dest;
53+
adjList.get(src).add(dest);
54+
adjList.get(dest).add(src);
55+
}
56+
}
57+
}

Algorithms/src/BfsProblems.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import java.util.*;
2+
3+
class BfsProblems {
4+
public static void main(String[] args) {
5+
Node root = new Node(1);
6+
root.left = new Node(2);
7+
root.right = new Node(3);
8+
root.left.right = new Node(4);
9+
root.right.left = new Node(5);
10+
root.right.right = new Node(6);
11+
root.right.left.left = new Node(7);
12+
root.right.left.right = new Node(8);
13+
14+
// findAllRightNodes(root);
15+
// System.out.println("Min Depth Value is = " + findMinDepth(root));
16+
// printTree(root);
17+
printNodes(root);
18+
}
19+
20+
private static void printTree(Node node) {
21+
HashMap<Integer, ArrayList<Integer>> treeMap = new HashMap<>();
22+
mapTreeLevels(node, treeMap, 1);
23+
LinkedList<List<Integer>> reverseLevel = new LinkedList<>();
24+
// Top to Bottom
25+
treeMap.forEach((level, nodeValues) -> {
26+
System.out.print(treeMap.get(level));
27+
reverseLevel.addFirst(treeMap.get(level));
28+
});
29+
System.out.println();
30+
// Bottom To Top
31+
reverseLevel.forEach(System.out::print);
32+
}
33+
34+
public static void insertIntoMultiMap(Map<Integer, List<Integer>> map,
35+
Integer key, Integer value) {
36+
map.putIfAbsent(key, new ArrayList<>());
37+
map.get(key).add(value);
38+
}
39+
40+
public static void printNodes(Node node) {
41+
if (node == null) return;
42+
43+
int level = 1;
44+
Map<Integer, List<Integer>> map = new HashMap<>();
45+
46+
insertIntoMultiMap(map, level, node.getData());
47+
Queue<Node> q1 = new ArrayDeque<>(), q2 = new ArrayDeque<>();
48+
49+
if (node.left != null && node.right != null) {
50+
q1.add(node.left);
51+
q2.add(node.right);
52+
}
53+
54+
while (!q1.isEmpty()) {
55+
level++;
56+
int n = q1.size();
57+
while (n-- > 0) {
58+
Node x = q1.poll();
59+
if (x != null) {
60+
insertIntoMultiMap(map, level, x.getData());
61+
if (x.left != null) q1.add(x.left);
62+
if (x.right != null) q1.add(x.right);
63+
}
64+
Node y = q2.poll();
65+
if (y != null) {
66+
map.get(level).add(y.getData());
67+
if (y.right != null) q2.add(y.right);
68+
if (y.left != null) q2.add(y.left);
69+
}
70+
}
71+
}
72+
73+
for (int i = map.size(); i > 0; i--) {
74+
System.out.print(map.get(i));
75+
}
76+
}
77+
78+
private static void mapTreeLevels(Node node, HashMap<Integer, ArrayList<Integer>> treeMap, int level) {
79+
if (node == null) return;
80+
ArrayList<Integer> nodes = new ArrayList<>();
81+
if (treeMap.containsKey(level)) nodes = treeMap.get(level);
82+
nodes.add(node.getData());
83+
treeMap.put(level, nodes);
84+
mapTreeLevels(node.left, treeMap, level + 1);
85+
mapTreeLevels(node.right, treeMap, level + 1);
86+
}
87+
88+
private static int findMinDepth(Node node) {
89+
if (node == null) return 0;
90+
int l = findMinDepth(node.left);
91+
int r = findMinDepth(node.right);
92+
if (node.left == null) return r + 1;
93+
if (node.right == null) return l + 1;
94+
return Math.min(l, r) + 1;
95+
}
96+
97+
private static void findAllRightNodes(Node root) {
98+
Map<Integer, Integer> rightNodes = new HashMap<>();
99+
printAllRightNodes(rightNodes, 1, root);
100+
rightNodes.forEach((level, rightNode) -> System.out.print(rightNode + " "));
101+
}
102+
103+
private static void printAllRightNodes(Map<Integer, Integer> rightNodes, int level, Node root) {
104+
if (root == null) return;
105+
// Add this condition to get left view of tree:
106+
// if (!rightNodes.containsKey(level))
107+
rightNodes.put(level, root.getData());
108+
printAllRightNodes(rightNodes, level + 1, root.left);
109+
printAllRightNodes(rightNodes, level + 1, root.right);
110+
}
111+
}
112+
113+
class Node {
114+
private final int data;
115+
Node left, right;
116+
117+
Node(int data) {
118+
this.data = data;
119+
this.left = this.right = null;
120+
}
121+
122+
public int getData() {
123+
return this.data;
124+
}
125+
}

Algorithms/src/DfsAlgorithm.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import java.util.Arrays;
2+
import java.util.List;
3+
4+
class DfsAlgorithm {
5+
public static void DFS(Graph graph, int v, boolean[] discovered) {
6+
discovered[v] = true;
7+
System.out.print(v + " ");
8+
for (int u : graph.adjList.get(v)) {
9+
if (!discovered[u]) {
10+
DFS(graph, u, discovered);
11+
}
12+
}
13+
}
14+
15+
public static void main(String[] args) {
16+
List<Edge> edges = Arrays.asList(
17+
new Edge(1, 2), new Edge(1, 7), new Edge(1, 8), new Edge(2, 3),
18+
new Edge(2, 6), new Edge(3, 4), new Edge(3, 5), new Edge(8, 9),
19+
new Edge(8, 12), new Edge(9, 10), new Edge(9, 11)
20+
);
21+
22+
int n = 13;
23+
24+
Graph graph = new Graph(edges, n);
25+
26+
boolean[] discovered = new boolean[n];
27+
28+
for (int i = 0; i < n; i++) {
29+
if (!discovered[i]) {
30+
DFS(graph, i, discovered);
31+
}
32+
}
33+
}
34+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
public class countNumberOfIsland {
2+
static int[] moveX = {-1, -1, 0, 1, 1, 1, -1, 0}, moveY = {0, 1, 1, 1, 0, -1, -1, -1};
3+
4+
static int Rows, Cols;
5+
6+
public static void main(String[] args) {
7+
8+
int[][] islandGrid = new int[][]{
9+
{1, 0, 1, 0, 0, 0, 1, 1, 1, 1},
10+
{0, 0, 1, 0, 1, 0, 1, 0, 0, 0},
11+
{1, 1, 1, 1, 0, 0, 1, 0, 0, 0},
12+
{1, 0, 0, 1, 0, 1, 0, 0, 0, 0},
13+
{1, 1, 1, 1, 0, 0, 0, 1, 1, 1},
14+
{0, 1, 0, 1, 0, 0, 1, 1, 1, 1},
15+
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
16+
{0, 0, 0, 1, 0, 0, 1, 1, 1, 0},
17+
{1, 0, 1, 0, 1, 0, 0, 1, 0, 0},
18+
{1, 1, 1, 1, 0, 0, 0, 1, 1, 1}
19+
};
20+
Rows = islandGrid.length;
21+
Cols = islandGrid[0].length;
22+
System.out.println("No of Islands: " + countNumberOfIsland.numIslands(islandGrid));
23+
}
24+
25+
public static int numIslands(int[][] islandGrid) {
26+
if (Rows == 0) return 0;
27+
int result = 0;
28+
29+
for (int i = 0; i < Rows; i++) {
30+
for (int j = 0; j < Cols; j++) {
31+
if (islandGrid[i][j] == 1) {
32+
DFS(islandGrid, i, j);
33+
result++;
34+
}
35+
}
36+
}
37+
return result;
38+
}
39+
40+
public static void DFS(int[][] islandGrid, int row, int col) {
41+
if (row < 0 || col < 0 || row >= Rows || col >= Cols || islandGrid[row][col] != 1)
42+
return;
43+
islandGrid[row][col] = 0;
44+
for (int i = 0; i < 8; i++) {
45+
DFS(islandGrid, row + moveX[i], col + moveY[i]);
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)