diff --git a/DisjointSet.java b/DisjointSet.java new file mode 100644 index 0000000..8cd73af --- /dev/null +++ b/DisjointSet.java @@ -0,0 +1,63 @@ +package Graph; + +import java.util.HashMap; + +public class DisjointSet { + + private HashMap map = new HashMap<>(); + + private class Node { + T data; + Node parent; + int rank; + + public Node(T d, int r) { + this.data = d; + rank = r; + } + + @Override + public String toString() { + return "Data: " + data + ", Parent:[" + parent.data + "] Rank: " + rank + ";"; + } + } + + public void makeSet(T v) { + + Node rn = new Node(v, 0); + rn.parent = rn; + map.put(v, rn); + } + + public void union(T data1, T data2) { + + Node node1 = map.get(data1); + Node node2 = map.get(data2); + + Node parent1 = findSet(node1); + Node parent2 = findSet(node2); + + if (parent1.rank >= parent2.rank) { + parent1.rank = (parent1.rank == parent2.rank ? parent1.rank + 1 : parent1.rank); + parent2.parent = parent1; + } else { + parent1.parent = parent2; + } + } + + public T findSet(T data) { + return findSet(map.get(data)).data; + } + + private Node findSet(Node node) { + if (node.parent == node) { + return node; + } + return node.parent = findSet(node.parent); + } + + public void display() { + for (T data : map.keySet()) + System.out.println(map.get(data)); + } +} diff --git a/settings.json b/settings.json new file mode 100644 index 0000000..8ea172a --- /dev/null +++ b/settings.json @@ -0,0 +1,53 @@ +{ + "editor.autoIndent": true, + "editor.codeActionsOnSave": { + "source.organizeImports": false + }, + "editor.codeLens": false, + "editor.cursorBlinking": "solid", + "editor.cursorSmoothCaretAnimation": true, + "editor.cursorStyle": "line", + "editor.fontSize": 14, + "editor.fontFamily": "Dank Mono, Operator Mono, Fira Code, Inconsolata, Menlo", + "editor.fontLigatures": true, + "editor.formatOnPaste": true, + "editor.formatOnType": false, + "editor.formatOnSave": true, + "editor.letterSpacing": 0.5, + "editor.lineHeight": 25, + "editor.minimap.enabled": false, + "editor.renderWhitespace": "none", + "editor.tabCompletion": "on", + "editor.tabSize": 2, + "editor.wordWrap": "off", + "files.autoSave": "afterDelay", + "files.autoSaveDelay": 1000, + "files.exclude": { + "**/.git": true, + "**/.DS_Store": true, + "**/*.js": { + "when": "$(basename).ts" + }, + "**/*.js.map": { + "when": "$(basename)" + } + }, + "files.hotExit": "onExit", + "files.defaultLanguage": "typescript", + "files.trimTrailingWhitespace": true, + "files.autoSave": "afterDelay", + "files.autoSaveDelay": 1000, + "files.exclude": { + "**/.git": true, + "**/.DS_Store": true, + "**/*.js": { + "when": "$(basename).ts" + }, + "**/*.js.map": { + "when": "$(basename)" + } + }, + "files.hotExit": "onExit", + "files.defaultLanguage": "typescript", + "files.trimTrailingWhitespace": true + } \ No newline at end of file